8

POCO ドメイン オブジェクトの依存関係を解決するように NHibernate に指示する方法を知りたいです。

CalculateOrderTax などのメソッドは、ドメイン固有のビジネス ルールをエンコードするため、Domain オブジェクトに含める必要があることがわかりました。しかし、それらを 2 つ取得すると、SRP に違反します。

これらのメソッドを Strategy クラスに抽出することは問題ありませんが、NHibernate にそれらをロードさせるにはどうすればよいでしょうか。

オブジェクトを上位レイヤーに渡す前に、リポジトリ内のオブジェクトのリストをループして get/set ベースの依存性注入を行うのは、良い解決策とは思えません。

また、現在、依存関係の注入にキャッスル ウィンザーも使用しています。

4

3 に答える 3

8

私は同様のタスクにインターセプターを使用しています:

ロードされたエンティティを変更するインターセプター:

public class MyInterceptor : EmptyInterceptor
{
    public override bool OnLoad(object entity, object id, object[] state, string[] propertyNames, IType[] types)
    {
        return InjectDependencies(entity as MyEntity);
    }
}

それをセッションに関連付けます。

nhSessionFactory.OpenSession(myInterceptor);

また、次の2.1リリースでカスタムコンストラクタインジェクションのサポートが改善されることもどこかで読みましたが、現時点ではリファレンスが見つからないようです。

于 2008-12-04T15:36:04.343 に答える
1

ドメインオブジェクトからサービスの依存関係を可能な限り削除する必要があるというGarryに同意します。暗号化/復号化など、意味がある場合もあります。その場合、インターセプトまたはIUserTypeを使用してインフラストラクチャで非表示にすることができます。後者の方が使えるといいと思います。 この記事では、その方法について詳しく説明します。私はこれをやっていて、それはかなりうまくいきます。

于 2008-12-04T17:49:23.887 に答える
1

現時点では誰もあなたの質問に答えることができないようですので、コードを再構築して、注文が独自の税金を計算する必要をなくすことをお勧めします。

Order オブジェクトを受け取り、 OrderValue オブジェクトまたはそれらの線に沿った何かを返す OrderTaxService に委任できます。

これにより、ロジックはドメイン内に保持されますが、Order オブジェクトにアタッチする必要がなくなります。

于 2008-12-04T14:29:14.993 に答える