4

休止状態を使用して、MySQL データベースからデータを保存および取得しています。私はバイト配列を使用していましたが、SerialBlob クラスに遭遇しました。クラスを正常に使用できますが、SerialBlob とバイト配列の使用の違いを見つけることができないようです。byte[] の SerialBlob inlu を使用したい基本的な違いや考えられる状況を知っている人はいますか?

4

1 に答える 1

5

SerialBlobは a の周りの単なる抽象化であることは正しいですが、次のbyte[]とおりです。

  • チームで仕事をしていますか?
  • たまに間違えますか?
  • コメントを書くのが面倒ですか?
  • 1 年前のコードが実際に何をしているか忘れることがありますか?

上記の質問のいずれかに「はい」と答えた場合は、おそらく を使用する必要がありますSerialBlob

これは基本的に、単純なデータ構造 (ByteBufferたとえば、 を考えてください) または別のクラスに関する他の抽象化と同じです。byte[]次の理由により、 で使用する必要があります。

  1. より説明的です。Abyte[]はある種のキャッシュである可能性があり、循環バッファーである可能性があります。また、何らかの整合性チェック メカニズムが間違っている可能性もあります。しかし、 を使用するSerialBlobと、これがデータベースからのバイナリ データのブロブに過ぎず、データベースに格納されることは明らかです。

    配列を手動で処理する代わりに、クラスでメソッドを使用します。これは、コードを知らなくても読みやすい方法です。些細な配列操作であっても、コードの読者は理解している必要があります。適切な名前のメソッドは自己記述的です。

    これは、チームメイトにとっても、1 年後にこのコードを読むときにも役立ちます。

  2. よりエラープルーフです。新しいコードを作成するたびに、バグを作成した可能性が高くなります。最初は見えないかもしれませんが、おそらくそこにあります。SerialBlobコードは世界中の何千人もの人々によってテストされており、それに関連するバグは発生しないと言っても過言ではありません.

    バイト配列の処理が正しいと確信していたとしても、それは非常に簡単なので、他の誰かが半年後にあなたのコードを見つけて「最適化」を開始したらどうなるでしょうか? 彼が古いブロブを再利用したり、魔法の配列のパディングを台無しにしたりしたらどうしますか? インデックス操作におけるすべてのオフバイワンエラーはデータを破損し、すぐには検出されない可能性があります (ユニットテスト書いていますよね?)。

  3. ほんの一握りの可能な相互作用のみに制限されます。これは実際にはデメリットのように見えるかもしれませんが、そうではありません。これにより、ブロブを使い終わった後、ブロブをローカルの一時変数として使用することがなくなります。それを利用Stringしたり、ばかげたことをしたりしないようにします。ブロブとしてのみ使用するようにします。繰り返しますが、明快さと安全性です。

  4. それはすでに書かれており、常に同じように見えます。プロジェクトごとに新しい実装を作成したり、10 の異なるプロジェクトで 10 の異なる実装を読んだりする必要はありません。誰かのプロジェクトでa を見たことがあればSerialBlob、その使用法は明らかです。みんな同じものを使っています。


TL; DR:数年前 (またはまだ C) では、a を使用してもbyte[]問題ありませんでした。Java (および一般的な OOP) では、プリミティブ (低レベル) 構造の代わりにジョブ用に設計された特定のクラスを使用してみてください。これは、意図をより明確に記述し、エラーの発生を減らし、長期的にはコードの長さを短縮するためです。 .

于 2013-04-30T00:12:15.003 に答える