sql >> Databasteknik >  >> RDS >> Mysql

Använda en SerialBlob vs byte[]

Du har rätt i att SerialBlob är bara en tunn abstraktion runt en byte[] , men:

  • Arbetar du i ett team?
  • Gör du ibland misstag?
  • Är du lat med att skriva kommentarer?
  • Glömmer du ibland vad din kod från ett år sedan faktiskt gör?

Om du svarade på någon av ovanstående frågor med ett ja , bör du förmodligen använda SerialBlob .

Det är i princip samma sak med alla andra abstraktioner kring en enkel datastruktur (tänk ByteBuffer t.ex.) eller en annan klass. Du vill använda den över byte[] , eftersom:

  1. Det är mer beskrivande. En byte[] kan vara någon form av cache, det kan vara en cirkulär buffert, det kan vara någon sorts integritetskontrollmekanism som gått fel. Men om du använder SerialBlob , det är uppenbart att detta bara är en klick binär data från databasen / som ska lagras i databasen.

    Istället för manuell arrayhantering använder du metoder på klassen, vilket återigen är lättare att läsa om du inte kan koden. Även trivial arraymanipulation måste förstås av läsaren av din kod. En metod med ett bra namn är självbeskrivande.

    Detta är användbart för dina lagkamrater och även för dig när du ska läsa den här koden om ett år.

  2. Det är mer felsäkert. Varje gång du skriver någon ny kod, finns det en god chans att du hade gjort en bugg i den. Det kanske inte syns först, men det är förmodligen där inne. SerialBlob kod har testats av tusentals människor runt om i världen och det är säkert att säga att du inte kommer att få några buggar kopplade till den.

    Även om du är säker på att du har hanterat din byte-array rätt, eftersom det är så enkelt, vad händer om någon annan hittar din kod om ett halvår och börjar "optimera" saker? Tänk om han återanvänder en gammal klump eller stökar till med din magiska array-utfyllnad? Varje enskilt fel i indexmanipulering kommer att förstöra din data och som kanske inte upptäcks direkt (du är skriver enhetstester, eller hur?).

  3. Det begränsar dig till endast en handfull möjliga interaktioner. Detta kan faktiskt se ut som en nackdel, men det är det inte! Det säkerställer att du inte kommer att använda din blob som en lokal temporär variabel efter att du är klar med den. Det säkerställer att du inte kommer att försöka skapa en String ur det eller något dumt. Det ser till att du bara använder det som en klump. Återigen, tydlighet och säkerhet.

  4. Det är redan skrivet och ser alltid likadant ut. Du behöver inte skriva en ny implementering för varje projekt, eller läsa tio olika implementeringar i tio olika projekt. Om du någonsin kommer att se en SerialBlob i någons projekt kommer användningen att vara tydlig för dig. Alla använder samma.

TL; DR: För några år sedan (eller kanske fortfarande i C), med en byte[] skulle vara ok. I Java (och OOP i allmänhet), försök att använda en specifik klass designad för jobbet istället för en primitiv (lågnivå) struktur eftersom den tydligare beskriver dina avsikter, ger färre fel och minskar längden på din kod i det långa loppet .




  1. JQuery Datatable - Dela en cell i flera kolumner för läsbarhet?

  2. SQL Server:Fråga snabbt, men långsam från proceduren

  3. Kan inte ansluta till MySQL live med Laravel 5

  4. Åtkomst till resultatuppsättningar från lagrade procedurer Transact-SQL SQL Server