Mysql
 sql >> Base de données >  >> RDS >> Mysql

Utilisation d'un SerialBlob vs byte[]

Vous avez raison que le SerialBlob est juste une fine abstraction autour d'un byte[] , mais :

  • Travaillez-vous en équipe ?
  • Fais-tu parfois des erreurs ?
  • Êtes-vous paresseux pour écrire des commentaires ?
  • Oubliez-vous parfois ce que fait votre code d'il y a un an ?

Si vous avez répondu à l'une des questions ci-dessus par un oui , vous devriez probablement utiliser SerialBlob .

C'est fondamentalement la même chose avec toute autre abstraction autour d'une structure de données simple (pensez à ByteBuffer , par exemple) ou une autre classe. Vous voulez l'utiliser sur byte[] , parce que :

  1. C'est plus descriptif. Un byte[] cela pourrait être une sorte de cache, cela pourrait être un tampon circulaire, cela pourrait être une sorte de mécanisme de vérification d'intégrité qui aurait mal tourné. Mais si vous utilisez SerialBlob , il est évident qu'il ne s'agit que d'un blob de données binaires de la base de données / à stocker dans la base de données.

    Au lieu de gérer manuellement les tableaux, vous utilisez des méthodes sur la classe, ce qui est, encore une fois, plus facile à lire si vous ne connaissez pas le code. Même une manipulation de tableau triviale doit être comprise par le lecteur de votre code. Une méthode avec un bon nom est auto-descriptive.

    Ceci est utile pour vos coéquipiers et aussi pour vous lorsque vous lirez ce code dans un an.

  2. C'est plus anti-erreur. Chaque fois que vous écrivez un nouveau code, il y a de fortes chances que vous y ayez créé un bogue. Ce n'est peut-être pas visible au début, mais c'est probablement là-dedans. Le SerialBlob code a été testé par des milliers de personnes à travers le monde et il est sûr de dire que vous n'obtiendrez aucun bogue associé.

    Même si vous êtes sûr d'avoir bien géré votre tableau d'octets, parce que c'est si simple, que se passera-t-il si quelqu'un d'autre trouve votre code dans six mois et commence à « optimiser » les choses ? Que se passe-t-il s'il réutilise un vieux blob ou gâche votre remplissage de tableau magique ? Chaque erreur unique dans la manipulation d'index corrompra vos données et cela pourrait ne pas être détecté immédiatement (vous êtes écrire des tests unitaires, n'est-ce pas ?).

  3. Cela vous limite à une poignée d'interactions possibles. Cela pourrait en fait ressembler à un démérite, mais ce n'en est pas un ! Cela garantit que vous n'utiliserez pas votre blob comme variable temporaire locale une fois que vous en aurez terminé. Cela garantit que vous n'essaierez pas de créer une String hors de lui ou quelque chose de stupide. Cela garantit que vous ne l'utiliserez que comme un blob. Encore une fois, clarté et sécurité.

  4. Il est déjà écrit et a toujours la même apparence. Vous n'avez pas besoin d'écrire une nouvelle implémentation pour chaque projet ou de lire dix implémentations différentes dans dix projets différents. Si jamais vous voyez un SerialBlob dans le projet de n'importe qui, l'utilisation sera claire pour vous. Tout le monde utilise le même.

TL ; DR : Il y a quelques années (ou peut-être encore en C), en utilisant un byte[] Serait bien. En Java (et en POO en général), essayez d'utiliser une classe spécifique conçue pour le travail au lieu d'une structure primitive (bas niveau) car elle décrit plus clairement vos intentions, produit moins d'erreurs et réduit la longueur de votre code à long terme .