私は、私のプロジェクトのいくつかのクラス(複数の引数、いくつかの必須、いくつかのオプションなど)にBuilderパターンを使用します。これらのクラスは不変です(セッター、コレクションゲッターのディープコピー)。Builderのパターンと永続性
私は今、デフォルトのコンストラクタ+セッタでオブジェクトを構築する永続化フレームワークを使用して、これらのオブジェクトをデータベースに格納しようとしています。それは私のビルダーが大好きではありません!
私はその設定をPOJOに劣化させたくなく、現在の設計(柔軟性、不変性、建設安全性)の利点を失いたくありません。
この状況で使用できる回避策についてのご意見をお待ちしております(これらのクラスをそれぞれラップすることができますが、それはクラスの数を2倍にし、むしろ避けたいと思います)。
postは実際にビルダーパターンの具体的な欠点として指摘しています。
EDIT
一つanswerは、プライベートコンストラクタ/セッターを使用することを提案しているが、クラスのフィールドは私の場合されていない、最終でない場合ということにのみ機能します。
FINAL EDITすべての
感謝。
class AClass {
private final String aField;
private final AClass() {
aField = "";
}
//Standard builder pattern after that - no setters (private or public)
}
セッターとデフォルトのコンストラクタを含めずに非公開にすることはできませんか? – DaveJohnston
良い質問 - 私はそれを確認します – assylias
私はHibernateがプライベートセッターとコンストラクタを使用できることを知っています。 – DaveJohnston