Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Verwenden eines SerialBlob vs byte[]

Sie haben recht, dass der SerialBlob ist nur eine dünne Abstraktion um ein byte[] , aber:

  • Arbeiten Sie in einem Team?
  • Machen Sie manchmal Fehler?
  • Sind Sie faul beim Schreiben von Kommentaren?
  • Vergissst du manchmal, was dein Code von vor einem Jahr eigentlich macht?

Wenn Sie eine der obigen Fragen mit Ja beantwortet haben , sollten Sie wahrscheinlich SerialBlob .

Es ist im Grunde dasselbe mit jeder anderen Abstraktion um eine einfache Datenstruktur herum (denken Sie an ByteBuffer , zum Beispiel) oder eine andere Klasse. Sie möchten es über byte[] verwenden , weil:

  1. Es ist beschreibender. Ein byte[] könnte eine Art Cache sein, es könnte ein Ringpuffer sein, es könnte eine Art Integritätsprüfmechanismus sein, der schief gelaufen ist. Aber wenn Sie SerialBlob verwenden , ist es offensichtlich, dass dies nur ein Blob binärer Daten aus der Datenbank ist, die in der Datenbank gespeichert werden sollen.

    Anstelle der manuellen Handhabung von Arrays verwenden Sie Methoden für die Klasse, was wiederum einfacher zu lesen ist, wenn Sie den Code nicht kennen. Selbst triviale Array-Manipulationen müssen vom Leser Ihres Codes verstanden werden. Eine Methode mit einem guten Namen ist selbsterklärend.

    Dies ist hilfreich für Ihre Teamkollegen und auch für Sie, wenn Sie diesen Kodex in einem Jahr lesen werden.

  2. Es ist fehlersicherer. Jedes Mal, wenn Sie einen neuen Code schreiben, besteht eine gute Chance, dass Sie einen Fehler gemacht haben. Es mag zunächst nicht sichtbar sein, aber es ist wahrscheinlich drin. Das SerialBlob Der Code wurde von Tausenden von Menschen auf der ganzen Welt getestet und man kann mit Sicherheit sagen, dass Sie keine damit verbundenen Fehler bekommen werden.

    Selbst wenn Sie sicher sind, dass Sie Ihr Byte-Array richtig handhaben, weil es so einfach ist, was ist, wenn jemand anderes Ihren Code in einem halben Jahr findet und anfängt, Dinge zu "optimieren"? Was ist, wenn er einen alten Blob wiederverwendet oder Ihre magische Array-Polsterung durcheinander bringt? Jeder einzelne Off-by-One-Fehler bei der Indexmanipulation wird Ihre Daten beschädigen und wird möglicherweise nicht sofort erkannt (Sie sind Unit-Tests schreiben, nicht wahr?).

  3. Es beschränkt Sie auf nur eine Handvoll möglicher Interaktionen. Das mag tatsächlich wie ein Minuspunkt aussehen, ist es aber nicht! Es stellt sicher, dass Sie Ihr Blob nicht als lokale temporäre Variable verwenden, nachdem Sie damit fertig sind. Es stellt sicher, dass Sie nicht versuchen, einen String zu erstellen aus ihm oder irgendetwas Dummes. Es stellt sicher, dass Sie es nur als Blob verwenden. Nochmals, Klarheit und Sicherheit.

  4. Es ist schon geschrieben und sieht immer gleich aus. Sie müssen nicht für jedes Projekt eine neue Implementierung schreiben oder zehn verschiedene Implementierungen in zehn verschiedenen Projekten lesen. Wenn Sie jemals einen SerialBlob sehen in jedem Projekt wird Ihnen die Verwendung klar sein. Jeder verwendet dasselbe.

TL; DR: Vor ein paar Jahren (oder vielleicht noch in C) mit einem byte[] wäre ok. Versuchen Sie in Java (und OOP im Allgemeinen), anstelle einer primitiven (niedrigen) Struktur eine bestimmte Klasse zu verwenden, die für den Job entwickelt wurde, da sie Ihre Absichten klarer beschreibt, weniger Fehler erzeugt und die Länge Ihres Codes auf lange Sicht reduziert .