それで、私はここで仕様パターンに関するいくつかの投稿を見ましたが、これに対する答えはまだ見つかりませんでした。
私の質問は、n層アーキテクチャでは、仕様を正確にどこで「更新」する必要があるのかということです。
それらをサービス層(別名、アプリケーション層と呼ばれることもあります...基本的には.aspxコードビハインドが通信するもの)に配置することはできますが、そうすることで、ビジネスルールを漏らしてしまうような気がします。ドメイン。ドメインオブジェクトが(サービスレイヤー以外の)他の方法でアクセスされる場合、ドメインオブジェクトは独自のビジネスルールを適用できません。
コンストラクターインジェクションを介して、仕様をModelクラスにインジェクトできます。しかし、繰り返しますが、これは「間違っている」と感じます。モデルクラスに注入する必要があるのは、キャッシング、ロギング、ダーティフラグトラッキングなどの「サービス」だけだと思います。それを回避できる場合は、モデルのコンストラクターを散らかす代わりにアスペクトを使用します。大量のサービスインターフェイスを備えたクラス。
メソッドインジェクション(「ダブルディスパッチ」と呼ばれることもあります???)を介して仕様を注入し、そのメソッドに注入された仕様を明示的にカプセル化して、ビジネスルールを適用することができます。
「ドメインサービス」クラスを作成します。このクラスは、コンストラクターインジェクションを介して仕様を取得し、サービスレイヤーがドメインサービスを使用してドメインオブジェクトを調整できるようにします。仕様によって適用されるルールはまだ「ドメイン」にあり、ドメインサービスクラスは、調整しているドメインオブジェクトと非常によく似た名前を付けることができるため、これは私には問題ないようです。ここで重要なのは、仕様パターンを「適切に」実装するためだけに、たくさんのクラスとコードを書いているような気がすることです。
これに加えて、問題の仕様は、それが「満たされている」かどうかを判断するためにリポジトリを必要とします。
これにより、特にパフォーマンスの問題が発生する可能性があります。コンストラクタインジェクションを使用する場合、b / cを消費するコードは、おそらく仕様をラップするプロパティを呼び出す可能性があり、それがデータベースを呼び出します。
それで、何かアイデア/考え/記事へのリンクはありますか?
仕様を更新して使用するのに最適な場所はどこですか?