Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Usando um SerialBlob vs byte[]


Você está certo que o SerialBlob é apenas uma pequena abstração em torno de um byte[] , mas:
  • Você está trabalhando em equipe?
  • Você às vezes comete erros?
  • Você é preguiçoso para escrever comentários?
  • Às vezes, você esquece o que seu código de um ano atrás realmente faz?

Se você respondeu a qualquer uma das perguntas acima com um sim , você provavelmente deve usar SerialBlob .

É basicamente o mesmo com qualquer outra abstração em torno de uma estrutura de dados simples (pense em ByteBuffer , por exemplo) ou outra classe. Você deseja usá-lo em byte[] , Porque:

  1. É mais descritivo. Um byte[] pode ser algum tipo de cache, pode ser um buffer circular, pode ser algum tipo de mecanismo de verificação de integridade que deu errado. Mas se você usar SerialBlob , é óbvio que este é apenas um blob de dados binários do banco de dados / a ser armazenado no banco de dados.

    Em vez de manipulação manual de array, você usa métodos na classe, o que é, novamente, mais fácil de ler se você não souber o código. Mesmo a manipulação trivial de arrays deve ser compreendida pelo leitor do seu código. Um método com um bom nome é autodescritivo.

    Isso é útil para seus colegas de equipe e também para você quando você ler este código em um ano.

  2. É mais à prova de erros. Toda vez que você escreve qualquer novo código, há uma boa chance de você ter feito um bug nele. Pode não ser visível no início, mas provavelmente está lá. O SerialBlob código foi testado por milhares de pessoas ao redor do mundo e é seguro dizer que você não terá nenhum bug associado a ele.

    Mesmo se você tiver certeza de que acertou o manuseio do seu array de bytes, porque é tão simples, e se outra pessoa encontrar seu código em meio ano e começar a "otimizar" as coisas? E se ele reutilizar um blob antigo ou estragar seu preenchimento de matriz mágica? Cada erro isolado na manipulação de índice corromperá seus dados e isso pode não ser detectado imediatamente (Você está escrevendo testes de unidade, não é?).

  3. Ele restringe você a apenas um punhado de interações possíveis. Isso pode realmente parecer um demérito, mas não é! Ele garante que você não usará seu blob como uma variável temporária local depois de terminar com ele. Ele garante que você não tentará fazer uma String fora dele ou qualquer coisa boba. Ele garante que você o usará apenas como um blob. Mais uma vez, clareza e segurança.

  4. Já está escrito e sempre parece o mesmo. Você não precisa escrever uma nova implementação para cada projeto ou ler dez implementações diferentes em dez projetos diferentes. Se você vir um SerialBlob no projeto de qualquer pessoa, o uso será claro para você. Todo mundo usa o mesmo.

TL; RD: Alguns anos atrás (ou talvez ainda em C), usando um byte[] seria bom. Em Java (e OOP em geral), tente usar uma classe específica projetada para o trabalho em vez de uma estrutura primitiva (de baixo nível), pois descreve mais claramente suas intenções, produz menos erros e reduz o comprimento do seu código a longo prazo .