Mysql
 sql >> Database >  >> RDS >> Mysql

Utilizzo di un SerialBlob vs byte[]

Hai ragione sul SerialBlob è solo una sottile astrazione attorno a un byte[] , ma:

  • Lavori in team?
  • A volte commetti errori?
  • Sei pigro nello scrivere commenti?
  • A volte dimentichi cosa fa effettivamente il tuo codice di un anno fa?

Se hai risposto a una delle domande precedenti con un , dovresti probabilmente usare SerialBlob .

È fondamentalmente lo stesso con qualsiasi altra astrazione attorno a una semplice struttura di dati (pensa a ByteBuffer , per esempio) o un'altra classe. Vuoi usarlo su byte[] , perché:

  1. È più descrittivo. Un byte[] potrebbe essere una sorta di cache, potrebbe essere un buffer circolare, potrebbe essere una sorta di meccanismo di controllo dell'integrità andato storto. Ma se usi SerialBlob , è ovvio che questo è solo un blob di dati binari dal database / da archiviare nel database.

    Invece della gestione manuale dell'array, usi i metodi sulla classe, che è, ancora una volta, più facile da leggere se non conosci il codice. Anche la manipolazione banale dell'array deve essere compresa dal lettore del tuo codice. Un metodo con un buon nome è autodescrittivo.

    Questo è utile per i tuoi compagni di squadra e anche per te quando leggerai questo codice tra un anno.

  2. È più a prova di errore. Ogni volta che scrivi un nuovo codice, ci sono buone probabilità che tu abbia creato un bug. Potrebbe non essere visibile all'inizio, ma probabilmente è lì. Il SerialBlob il codice è stato testato da migliaia di persone in tutto il mondo ed è sicuro dire che non riceverai alcun bug ad esso associato.

    Anche se sei sicuro di aver gestito correttamente la tua matrice di byte, perché è così semplice, cosa succede se qualcun altro trova il tuo codice in sei mesi e inizia a "ottimizzare" le cose? E se riutilizzasse un vecchio blob, o incasinasse la tua imbottitura magica? Ogni singolo errore nella manipolazione dell'indice danneggerà i tuoi dati e ciò potrebbe non essere rilevato immediatamente (tu sei scrivendo unit test, vero?).

  3. Ti limita solo a una manciata di possibili interazioni. Questo potrebbe effettivamente sembrare un demerito, ma non lo è! Ti assicura che non utilizzerai il tuo BLOB come variabile temporanea locale una volta terminato. Ti assicura che non proverai a creare una String fuori di esso o qualcosa di stupido. Si assicura che lo userai solo come un blob. Ancora, chiarezza e sicurezza.

  4. È già scritto e sembra sempre lo stesso. Non è necessario scrivere una nuova implementazione per ogni progetto o leggere dieci diverse implementazioni in dieci diversi progetti. Se mai vedrai un SerialBlob nel progetto di chiunque, l'utilizzo ti sarà chiaro. Tutti usano lo stesso.

TL; DR: Qualche anno fa (o forse ancora in C), usando un byte[] andrebbe bene. In Java (e OOP in generale), prova a utilizzare una classe specifica progettata per il lavoro invece di una struttura primitiva (di basso livello) poiché descrive più chiaramente i tuoi intenti, produce meno errori e riduce la lunghezza del tuo codice a lungo termine .