sql >> Base de Datos >  >> RDS >> Mysql

Usando un SerialBlob vs byte[]

Tienes razón en que el SerialBlob es solo una abstracción delgada alrededor de un byte[] , pero:

  • ¿Estás trabajando en equipo?
  • ¿A veces cometes errores?
  • ¿Te da pereza escribir comentarios?
  • ¿A veces olvidas lo que realmente hace tu código de hace un año?

Si respondió alguna de las preguntas anteriores con un , probablemente debería usar SerialBlob .

Es básicamente lo mismo con cualquier otra abstracción en torno a una estructura de datos simple (piense en ByteBuffer , por ejemplo) u otra clase. Quieres usarlo sobre byte[] , porque:

  1. Es más descriptivo. Un byte[] podría ser algún tipo de caché, podría ser un búfer circular, podría ser algún tipo de mecanismo de verificación de integridad que salió mal. Pero si usa SerialBlob , es obvio que esto es solo una gota de datos binarios de la base de datos / que se almacenará en la base de datos.

    En lugar del manejo manual de matrices, usa métodos en la clase, que es, nuevamente, más fácil de leer si no conoce el código. Incluso la manipulación trivial de matrices debe ser comprendida por el lector de su código. Un método con un buen nombre es autodescriptivo.

    Esto es útil para tus compañeros de equipo y también para ti cuando leas este código en un año.

  2. Es más a prueba de errores. Cada vez que escribe un código nuevo, es muy probable que haya cometido un error. Puede que no sea visible al principio, pero probablemente esté ahí. El SerialBlob el código ha sido probado por miles de personas en todo el mundo y es seguro decir que no tendrá ningún error asociado.

    Incluso si está seguro de que ha manejado correctamente su matriz de bytes, porque es muy sencillo, ¿qué sucede si alguien más encuentra su código en medio año y comienza a "optimizar" las cosas? ¿Qué pasa si reutiliza una mancha vieja o se estropea con el relleno de la matriz mágica? Cada uno de los errores en la manipulación de índices corromperá sus datos y es posible que no se detecte de inmediato (usted está escribiendo pruebas unitarias, ¿verdad?).

  3. Te restringe a solo un puñado de posibles interacciones. Esto podría parecer un demérito, ¡pero no lo es! Garantiza que no usará su blob como una variable temporal local una vez que haya terminado con él. Asegura que no intentará hacer una String fuera de él o cualquier cosa tonta. Se asegura de que solo lo usará como un blob. De nuevo, claridad y seguridad.

  4. Ya está escrito y siempre se ve igual. No tiene que escribir una nueva implementación para cada proyecto, o leer diez implementaciones diferentes en diez proyectos diferentes. Si alguna vez ves un SerialBlob en el proyecto de cualquier persona, el uso será claro para usted. Todos usan el mismo.

TL; DR: Hace unos años (o tal vez todavía en C), usando un byte[] estaría bien. En Java (y OOP en general), intente usar una clase específica diseñada para el trabajo en lugar de una estructura primitiva (de bajo nivel), ya que describe más claramente sus intenciones, produce menos errores y reduce la longitud de su código a largo plazo. .