0

私が取り組んでいるアプリケーションでは、新しいエンティティがリポジトリに追加されたときにトリガーされるアクションがあります。新しいアクションの 1 つは、サービス (エーテルのどこかにある Web サービスではなく、サービス層など) を使用して、オブジェクトが入ってきたときにいくつかのビジネス ルール操作を実行することになっています。

これはすべてうまくいきますが、使用する必要がある正確なサービスは、操作しているエンティティのプロパティによって異なります (基本的に、エンティティがどの顧客に関連しているかによって異なります)。アクションが呼び出す必要のあるサービスのフレーバーとアクションを疎結合にしたいと考えています。

私が考えているのは、エンティティを受け入れて正しいサービスを返すファクトリを実装することです。ただし、これは少し厄介なようです。これを設定するより良い方法はありますか?

実行時に正しい実装を判断するために IoC コンテナーを使用することを検討しましたが、いくつか (Ninject と Windsor) をざっと調べただけでは、この種の操作に適しているとは思えません。

4

3 に答える 3

0

MEF (Managed Extensibility Framework)を詳しく調べることをお勧めします。これにより、要件に厳密に (正確ではないにしても) 適合する非常に不可知な疎結合が提供されます。

于 2012-09-20T20:34:52.070 に答える
0

このイテレーションでは、シンプルに保ち、ファクトリを使用して適切なインターフェイスを選択すると思います (つまり、元の投稿で「ぎこちない」と思ったソリューション)。すべてのフィードバックに感謝します!

于 2012-09-24T12:53:20.063 に答える
0

あなたはこれに間違った方法でアプローチします。これにはイベントを使用する必要があります。

// your repository event
public class ItemCreated<T>
{
}

ハンドラー:

public class DoSomething : ISubscribeOn<ItemCreated<User>>
{
    public class DoSomething(ISomeService)
    {}
}

サービス自体ではなく、イベントにサブスクライブする仲介者であることに注意してください。それは物事の分離を少なくします。

これはすべて私の IoC コンテナに組み込まれています: http://www.codeproject.com/Articles/440665/Having-fun-with-Griffin-Container

ドメイン イベントまでスクロールします。

于 2012-09-21T10:15:56.987 に答える