Mysql
 sql >> база данни >  >> RDS >> Mysql

Използване на SerialBlob срещу byte[]

Прав сте, че SerialBlob е просто тънка абстракция около byte[] , но:

  • Работите ли в екип?
  • Правиш ли понякога грешки?
  • Мързи ли ви да пишете коментари?
  • Забравяте ли понякога какво всъщност прави кодът ви от преди година?

Ако сте отговорили на някой от горните въпроси с да , вероятно трябва да използвате SerialBlob .

По същество е същото с всяка друга абстракция около проста структура от данни (помислете за ByteBuffer , например) или друг клас. Искате да го използвате над byte[] , защото:

  1. По-скоро е описателно. byte[] може да е някакъв вид кеш, може да е кръгъл буфер, може да е някакъв вид механизъм за проверка на целостта, който се е объркал. Но ако използвате SerialBlob , очевидно е, че това е просто петно ​​от двоични данни от базата данни / които трябва да се съхраняват в базата данни.

    Вместо ръчна обработка на масиви, вие използвате методи на класа, което отново е по-лесно за четене, ако не знаете кода. Дори тривиалното манипулиране на масиви трябва да бъде разбрано от читателя на вашия код. Метод с добро име е самоописателен.

    Това е полезно за вашите съотборници, а също и за вас, когато четете този код след година.

  2. Това е повече доказателство за грешки. Всеки път, когато пишете нов код, има голям шанс да сте направили грешка в него. Първоначално може да не се вижда, но вероятно е там. SerialBlob кодът е тестван от хиляди хора по целия свят и е безопасно да се каже, че няма да получите никакви грешки, свързани с него.

    Дори и да сте сигурни, че сте се справили правилно с вашия байтов масив, защото е толкова ясен, какво ще стане, ако някой друг намери вашия код след половин година и започне да „оптимизира“ нещата? Какво ще стане, ако той използва повторно старо петно ​​или обърка магическия ви масив? Всяка отделна грешка при манипулирането на индекса ще повреди вашите данни и това може да не бъде открито веднага (Вие сте пишете модулни тестове, нали?).

  3. Той ви ограничава само до няколко възможни взаимодействия. Това всъщност може да изглежда като недостатък, но не е! Той гарантира, че няма да използвате вашия петно ​​като локална временна променлива, след като приключите с него. Това гарантира, че няма да опитате да направите String извън него или нещо глупаво. Това гарантира, че ще го използвате само като петно. Отново, яснота и безопасност.

  4. Вече е написано и винаги изглежда по същия начин. Не е нужно да пишете нова реализация за всеки проект или да четете десет различни реализации в десет различни проекта. Ако някога видите SerialBlob в нечий проект употребата ще ви бъде ясна. Всеки използва един и същ.

TL; DR: Преди няколко години (или може би все още в C), използвайки byte[] би било добре. В Java (и ООП като цяло) опитайте да използвате специфичен клас, предназначен за работата, вместо примитивна (ниско ниво) структура, тъй като тя по-ясно описва вашите намерения, създава по-малко грешки и намалява дължината на вашия код в дългосрочен план .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MYSQL UNION DISTINCT

  2. защо заявката sum() връща резултат с повече десетични точки?

  3. Проблеми при свързване към отдалечен хост MySQL с Rails

  4. SELECT не работи в node.js

  5. Ненормално извикване на съхранена процедура на Mysql