2

(より大きなプロジェクトの一部として) 電子メール通知サービスを作成する必要があります。

HTMLテンプレートに基づくいくつかのタイプの通知メッセージを送信するために使用されます。

次の 2 つの方法で設計できます。

  1. 最初の方法はビルダー パターンに基づいています。それは(私が思うに)普遍的であり、必要なすべてのケースを処理できます。しかし、それを使用する人にとってはあまり便利ではありません。典型的な使用法は次のようになります。

    messageBuilder
       .put("name", "John Doe")
       .put("company", companyObj)
       .processPattern(pattern)
       .send(addresses, subject);
    
  2. 2 番目の方法は、すべてのケースを明示的に実装することです。これは、使用コード (以下に示す) は可能な限り単純にすることを意味しますが、新しいケースを処理する必要があるたびに API を変更 (新しいメソッドを追加) する必要があります。

    messageSender.sendPersonExpenceNotification(addresses, "John Doe", company); 
    

どちらの方がよいですか?なんで?(問題があれば言語はJavaです)

ありがとう!

4

3 に答える 3

2

答えは両方を使用することだと思います。API でより一般的なアプローチ (メッセージ ビルダー) を使用し、特定のタスクに簡単に使用できるクライアント側の便利な関数/クラスを提供することをお勧めします。この方法では、新しいケースを追加するときに API を更新する必要はありませんが、クライアントは実行しようとしていることに最も直接的な呼び出しを引き続き使用できます。

于 2010-07-12T12:08:22.740 に答える
0

効果的な Java 2nd Edition、項目 2: 多くのコンストラクター パラメーターに直面した場合はビルダーを検討してください

ビルダー パターンは、より多くのパラメーターを使用できる可能性があるため、より読みやすくなっています。とは言っても、通常、ビルダーには特定setNameの、 などのメソッドがある方が一般的です。そうすれば、、 などsetCompanyの型安全性を強制することもできます。setSomeBoolean(boolean)setSomeInt(int)

ビルダー パターンを使用すると、一部のパラメーターにデフォルト値を設定することもでき、ユーザーは一部のパラメーターのデフォルトを簡単にオーバーライドできます。これをシミュレートするメソッドを提供するには、多くのオーバーロードを記述する必要があり、問題をさらに悪化させます。

関連する質問

于 2010-07-12T12:04:59.573 に答える
0

現在、最も好まれているデザイン パターンは、"流暢な" ビルダーに依存しています。このようにして、わかりやすいインターフェースでビルダーの汎用性を得ることができます。

メソッド名を適切に選択するだけの問題であることを考えると、それを実装するのはかなり平凡です。

実際の良い例は、すべてのFEST* ライブラリーです。

于 2010-07-12T12:07:38.920 に答える