2011-12-09 8 views
2

私はMVC3 Webフロントエンドを持つソリューションを持っています。私はビューモデルのための別のアセンブリを持っています。私はすべてのドメインオブジェクトとビジネス機能とビジネス検証を含むサービスアセンブリを持っています。私のサービスはまた、私のWebサイトにすべてのビューモデルを提供します。したがって、Webサイトはサービスとモデルのアセンブリを認識しています。サービスはモデルアセンブリのみを認識しており、モデルアセンブリはそれを認識していません。デカップリングを増加させるソリューションの共通のインタフェースを置く場所はどこですか?

私はカートモデルを検証して処理するためにサービスが必要な場合があります。カート内のアイテムは、サービスアセンブリで定義したいインターフェイスを実装しています。私の問題は、カート・モデルがこのインターフェースを使用するためには、サービス・アセンブリーについて知っておく必要があるということです。私がモデル・アセンブリでインターフェースを定義した場合、私はこの2つのアセンブリーを必要としない方法で結合しました。

だから、私はインターフェイスが含まれている別のアセンブリを追加することにより、これらを切り離すことができ、それぞれがそれを参照ことを決めました。だから今、彼らはこのアセンブリに密接に結合されていますが、互いに直接結合されていません。

この「インターフェイスのみ」のアセンブリは実用的なソリューションですか、別のものを実行する必要がありますか?

+2

クローズ有権者には、なぜこのような話題はありませんか? –

+0

インターフェイスは、インターフェイスを実装しているモデルで定義する必要があります。あなたのサービスはすでにあなたのモデルアセンブリを参照していますので、私は結合の増加を見ません。結局のところ、インタフェースはモデルへのインタフェースですが、正しいのでしょうか? –

+1

あなたはそれを正しくしました! –

答えて

2

あなたは、モデルのアセンブリ(サービスアセンブリはまた、それを見ることができる場所)でカートのインターフェイスを置くことができるか、あなたは4日、「インターフェースのみ」のアセンブリにそれを置くことができます。後者の場合は、MVCプロジェクトとサービスプロジェクトをモデルアセンブリのモデル実装への結合を減らすという利点があるため、新しいアセンブリのみを参照するようにしてください。

編集:私はモデルのアセンブリへの依存を除去して唯一のインターフェースのみのアセンブリを参照すると、(モデルアセンブリで定義された)具体的な実装をロードするためにIoCコンテナまたは類似のものを使用して必要となることを言及する必要があります

+0

私はほとんどのIoCの問題を処理するためにNinjectを使用しています。私は、インターフェイスのみのアセンブリを使用して、私のアプローチを続けます。私の質問にはそれ以上のものがあるので、私は基本だけを含んでいました。ありがとう。 –

1

にこれは完全に実行可能な解決策です。基本的には、インターフェイスを定義するCartアセンブリがあり、おそらく既定の具体的な実装やその他のCart関連の偽装も提供されます。すでにICartインタフェースを使用して、やったとして

あなたのサービスや他のアセンブリの両方がカートアセンブリを参照します。これは良いデカップリングです。

関連する問題