2012-01-20 7 views
2

これは意見の質問として解釈できますが、現在解決しようとしているのは技術的な問題です。プリズムの共有インターフェイスはどこに配置する必要がありますか?

Prismのドキュメントでは、モジュールが直接参照なしで疎結合を持ち、共有インタフェースを経由する必要があると述べられています。以下の画像のように:

Module dependencies

私の問題があるだけで、いくつかのモジュールがIOrdersRepositoryを必要に応じて、これはすべてのモジュールの共有のコードが含まれているように、インフラストラクチャは、それのために間違った場所です。インターフェイスを別のモジュールに配置すると、両方のモジュールが直接そのモジュールを参照して、疎結合を解除する必要があります。

このインターフェイスを含むライブラリを作成し、モジュールパターンに従わないのはどうですか?

おかげで、 ルーク

+1

ので、あなたの計画は何ですか?インターフェイスが「すべてのモジュール」で共有されていないたびに別々のアセンブリを作成しますか?私はインフラストラクチャに入れました。これは、すべてのモジュールで共有されているコードなので、 –

+0

私は、共有されている各インターフェイスセット(たとえば、Ordersを扱うすべてのインターフェイス)ごとに別々のアセンブリを作成することを考えていました。しかし、あなたが言っていることは意味があります、私はインフラストラクチャプロジェクトがほとんどのモジュールが必要としないインターフェースでいっぱいになるだろうと心配しています。 – Lukazoid

+0

@ chopikadzeの答えの後に、別のアプリケーションでいくつかのサービスを再利用したい場合、このソリューションがどのように機能するのだろうかと思います。別個のインタフェースアセンブリと実装モジュールのアプローチは、例えばサービスがウェブサイト上で使用されることを意味する。 – Lukazoid

答えて

5

は、これは間違いなくInfrastructureモジュールでなければなりません。 Markusの議論はまったく正しいです - あなたは、インターフェイスの共有セットごとに別々のアセンブリを作成すべきではありません。 Infrastructureモジュールをたくさん持っている方が、各モジュールにいくつかのインターフェイスを備えた多くのモジュールがたくさんあります。あなたが見つけたのは、あなたの2つの "インターフェースのセット"がいくつかの共有インターフェースを使うべきだと想像してみてください!あなたは何をしますか?その "スーパー共有"インターフェース用のアセンブリを1つ追加しますか?または、これらのモジュールを1つに結合しますか?私は間違っていると思う。

だから間違いなくInfrastructureモジュール!

PS。 .NET Frameworkは1000年代のライブラリがあることを、想像して - コレクションの1、数学関数などのためanotheroneを....

UPDATE:

が実は、私はほとんどのインターフェイスと非常に基本的なのDTOのためInfrastructureモジュールを使用しています。すべて共有コード別のアセンブリ(YourApplication.UIControlsYourApplication.DALなど)に移動します。私はこのようにする理由は十分ではありませんが、これはプリズムの勧告を理解する私のやり方です。ただIMHO。

UPDATE 2:

あなたはあなたのサービスを共有したい場合は幅が広いので - 私はそれが絶対にローミングサービスは以下のような構造を持つようになりますと思う:

  • YourApplication.Infrastructure - 「非常共有」のインターフェイス(のようなIPaymentService
  • YourApplication.Modules.PaymentModule - あなたのPaymentService
  • YourApplication.WPF.Infrastuctureの "非常共有" の実装 - あなたのインフラストラクチャあなたのYourApplication.Modules.PaymentModule
  • YourApplication.WebSite.Modules.PaymentUIのためのいくつかのWPF固有のUI - - YourApplication.Infrastructure
  • YourApplication.WPF.Modules.PaymentUIに加えて、WPFアプリケーション(ウェブサイト

などなどのためのUI ..だから、あなたのモジュールはほとんど常にYourApplication.InfrastructureYourApplication.TYPEOFAPP.Infrastructureへの参照を持っているだろう、TYPEOFAPPはWPFできる場合、ウェブサイト、WINSERVICEなど。それとも、YourApplication.Modules.PaymentUI.WPFのようにそれに名前を付けることができます。..

+0

あなたの答えはありがとう、アセンブリの大量についてはあなたが言っていることは正しく聞こえ、それは管理不能に成長するでしょう。インフラストラクチャのプロジェクトにサービスインターフェイスを配置することへの私の懸念は、サービス実装のすべてが「インフラストラクチャ」を参照するため、他のプロジェクトのサービスの再利用を悪夢(例えばウェブサイト)にすることである。これは、インターフェイスのための共有アセンブリと、実装のためのアセンブリ/モジュールを持っているという私の考えがどこから来たかです。 – Lukazoid

+0

2回目の更新をありがとう、ちょうど私が必要とするもののように思える。プリズムモジュラーアプローチを提供しながら、サービスの再利用を可能にします。ありがとう:) – Lukazoid

+0

+1合意(男、なぜそこに最小のコメントの長さ???) –

関連する問題