複数の値オブジェクトのビジネスロジック - どこループを置きますか?
-
20-09-2019 - |
質問
...と最高のビュー層に成功/失敗のフィードバックを処理する方法について説明します。
オプションがあります:
doBusinessLogic(things)
または
for (Thing thing : things) {
doBusinessLogic(thing)
}
私たちは(すなわち、値オブジェクト上の単一または複数の事業から)一貫した方法で成功/エラーのフィードバックを受けて、ビュー層をしたいと仮定すると、最善のアプローチは何ですか?
明確化:
ビュー層のビジネスロジックの呼び出しからスローされた複数の例外型を処理するコードに重いですし、また、(新しい例外が導入され、プレゼンテーション層が約知りません)メンテナンス上の問題が発生します。これは、ビジネス・ロジックの複数の値オブジェクトのエラーを処理するための呼び出しで一貫性のある方法で対処するビューのための「パッケージ」、それらをより良いようです。
解決
どのように後者の提案の線に沿って何かについてます:
for (businessObject : businessObjects) { businessObject.doBusinessLogic() }
アイデアは、ビジネス・オブジェクトのメソッドでビジネスロジックを置くことです。彼らのビジネスを行うには、それぞれを伝えるすべてのビジネス・オブジェクトの上に表示層缶ループ。それぞれがどのようにそのビジネスは、ビジネスレイヤ内のビジネス・オブジェクトのロジックです。あなたはdoBusinessLogicメソッドから値を返すことや嫌な出来事のために例外をスローすることによって、エラーや、そのような扱いをすることができます。
あなたはおそらく、あなたが1つ以上のビジネス・オブジェクトに取るメソッドを持っており、上で動作可能性がbusinessObjectManagerクラスを構築することができ、(複数の単一のビジネス・オブジェクト上で動作し、すなわち、ロジック)クロスビジネス・オブジェクト・ロジックを実行している場合それら。このように、ビジネス層で管理オブジェクトを置くことによって、あなたはまだ、ビジネス層でビジネスロジックのすべてを維持します。
他のヒント
最終的に私はかつてのオプションのために行って、オブジェクトの集合上のアクションの成功と失敗をカプセル化し、軽量、一般的な「結果バンドル」クラスを作成しました。成功または失敗は、対応するオブジェクト識別子にキー止めされている。
bundlesisは、各ビジネス・ロジック・コールの内部移入およびビュー層に戻します。ビジネス・ロジック・ループ「オブジェクトにアクションを実行する」でスローされた例外をキャッチし、対応する障害が(オブジェクトIDをキー)結果バンドルに追加されます。
ビュー層は、ユーザに結果バンドルに含まれるフィードバックを提示する単純なヘルパーメソッドがあります。
これは非常によく動作します。
私はあなたがこれで取るアプローチは、あなたのシステムで最高のフィットされているものだと思います。