ドメインモデルからのサービス(Windsor IoCコンテナのようなプロセスローカルコンポーネントの意味で)を使用する可能性を比較しています。
これを実現する方法は3つあります。
ドメインイベントを公開し、サービスレイヤーコードで処理する
モデルオブジェクトのメソッドを介してサービスを注入する
モデルオブジェクトにサービスを注入する
(4.サービスロケーターの使用)
1つ目は、非常に表現力豊かで反復的なパターンにつながり、ドメインイベントとハンドラーを手続き型で作成します。しかし、それはそれが使用される環境からのモデルの最良の分離を持っています(モデルは自己定義されます)。
2つ目は、メソッドの引数を長くし、カプセル化を破るように見えます(モデルオブジェクトのアクションに他のサービスが必要な場合は、すべての呼び出し元を変更する必要があります)。
3つ目は、現在のトランザクションに必要のない依存関係を注入します。また、このためにNHibernateを「拡張」する必要があります。他の推奨事項を読んでいるため、この方法は避けます。
これをドキュメントに書きたいので、いつどの方法を使用するかを読者に伝える必要があります。「ドメインイベントハンドラーをモデルアセンブリに配置する場合は、メソッドインジェクションを使用する」という方針に沿って何かを考えていますが、実際にはポイントに達していません。
このルールの提案はありますか?