2

POJOs遵守すべき特定のルールがあるものがいくつかあります。タイプAのObjectAの状態は、タイプBのObjectBの状態に依存します。この状況では、ビルダーを使用してObjectAObjectBのルールを適用します。

ビルダーは、 ObjectAのビルド時に、すべての検証を実行し、例外をスローし、チェックを実行する責任を負います。これは問題ではありません。将来、開発者がビルダーを使用してタイプAをインスタンス化して操作することを望んでいます。どうすればこれを実施できますか?

これが私の選択肢のいくつかです。これが最善の方向性です。

  1. ドキュメント、開発者がドキュメントを読まなければそれほど効果的ではありません。何かができる場合は別として、誰かが読むでしょう。
  2. 検証をに移動しますが、私はORMPOJOを使用しており、プロパティが設定されているときにエラーがスローされることはめったにありません。
  3. この問題についてのあなたの考え。
4

4 に答える 4

2

静的内部ビルダーを使用します。

または、コンストラクターを保護し、ビルダーをパブリックインターフェイスと同じパッケージに入れます

于 2012-10-10T13:34:39.750 に答える
1

これらがPOJOであることを考えると、コンストラクターをパブリックより少なくすることはオプションではないと思います。これはORMで問題を引き起こすからです。

コンストラクターを非公開にする可能性がある場合は、ビルダーをPOJOクラスの静的サブクラスにし、コンストラクターをプライベートにして、他のユーザーがPOJOを直接インスタンス化できないようにすることができます。

ただし、少なくとも@Deprecatedアノテーションを使用して、POJOのコンストラクターを使用するための警告を提供できる必要があります。そして@SuppressWarnings("deprecation")、インスタンス化を行うBuilderメソッドで使用して、クリーンなビルドを取得できます。

于 2012-10-10T13:34:30.687 に答える
1

クラスAのコンストラクターを直接呼び出せないようにしてください。それprivateを作成し、コンストラクターにアクセスできる静的内部クラスとしてビルダーを作成します。次に(オプションで)Aでメソッドを作成します

public static Builder builder() {
    return new Builder();
}

便利な方法でビルダーにアクセスします。このメソッドに外部依存関係(Bなど)を渡すこともできます。

于 2012-10-10T13:35:36.377 に答える
1

、、Builderを同じパッケージに入れますObjectAObjectB次に、コンストラクターを作成しObjectAObjectB保護します。そうすれば、ビルダーだけがそれらを作成できます。

于 2012-10-10T13:47:34.187 に答える