BLLは無国籍である必要がありますか?
-
26-09-2019 - |
質問
アプリケーションのためにBLLを構築しています。私が見た /読んだことから、BLLは無国籍であるべきだと思われます。これは、すべてのBLLメソッドが静的である可能性があることを意味しませんか?または、少なくとも各BLLクラスのインスタンスが1つだけ必要ですか?何らかの理由で私には奇妙に思えるので、実験をあまりにも掘り下げてから、スティックの間違った終わりを獲得していないことを確認した方がいいと思いました。
また、これはBLLオブジェクトにデータが含まれないことを意味すると考えています。データには状態を表しているため、BLL操作が呼び出されるたびに、必要なデータをリクエア(またはキャッシュから取得)してから廃棄する必要があります。それは正しいですか?
ありがとう。
解決
理論的には、はい、ステートレスBLLは、すべての方法が静的であることを意味します。
ただし、静的ではなくBLLオブジェクトのインスタンスを使用することに向けてスイングする可能性のあるいくつかの考慮事項があります。
静的メソッドは、クラス間に緊密な結合を導入し、EGインターフェイスを使用して依存関係を大まかに使用することを防ぎます。インターフェイスを使用すると、サービスレイヤーのユニットテストを書くときにock笑できるため、BLLのテスト能力が向上します。 BLLメソッドが静的である場合、通常、「回避策」なしではこれを行うことができません(たとえば、必要になります
TypeMock
またMicrosoft Fakes
.NET環境で)。複雑なBLLメソッド(大規模トランザクションロジックなど)では、各ビジネスルールをいくつかの個別の方法にリファクトし、出力ですべての検証とルール違反をすべてのすべての集計結果に蓄積する可能性があります。違反。この場合、エンティティ /エンティティを検証し、ルール違反を蓄積し、代わりにクラスインスタンスでこれらのステートフル保存を選択することは面倒なことです。インスタンスの基本クラスまたは汎用BLLは、ここで支援できます。