2011-01-26 6 views
10

インターフェイスとそれを実装するクラスに関して、ソリューション/プロジェクトの構成方法に関する標準はありますか?私はMVP、DDDアプリケーションに取り組んでいて、他の人が自分たちのプロジェクトをどのようにレイアウトしているのか、そしてなぜ彼らがそのようにしているのかについてのフィードバックを歓迎します。ありがとう!!インターフェイスは、それらを実装する具体的なクラスとして同じ名前空間に存在する必要がありますか?

答えて

10

これらは論理的な名前空間に存在する必要があります。これは、同じ名前空間内に存在する必要があるかどうかの確固たるルールがないことを意味します。相対的に抽象的な名前空間は実装の横に並んでいないことがよくありますが、実装者と1対1のインタフェースは相互に並んでいる可能性が高くなります。

さらに重要な考慮事項は、インターフェイスを消耗品として再利用できるようにすることです。通常は、名前空間ではなくインターフェイスに沿ってアセンブリに入るものを考慮する必要があります。

4

Separate InterfacesのMartin Fowlerのパターンを確認すると、どこに配置するかを決めるのに役立ちます。

+1

+1興味深いが、私は(http://www.objectmentor.com/resources/articles/dip.pdf)[依存性逆転原理(PDF)]としてトリスを知っていました。 –

+0

は少しこの状況で私の疑問をクリア:http://stackoverflow.com/questions/5840219/why-should-we-place-interfaces-with-classes-that-use-them-rather-than-those-that –

1

確かにそれを行う理由はありません。

実際に、インターフェイスのユーザーが具体的なクラスを認識する必要がない場合、複数の実装があり、インターフェイスを定義するグループが特定のバージョンを実装するグループと異なる場合(これは有効なケースです)、実装とインタフェースの名前空間を分離することをお勧めします。

私はC#についてあまりわからないですが、Javaで、パッケージのメンバーシップはメソッドの可視性を強化するための重要な組織のパターンです。 package-privateのものを利用したいのであれば、基本的に実装クラスを同じパッケージにまとめる必要があります(そうすれば、おそらくそれらをインタフェースと一緒にまとめることはできません)。

+0

そうですね、ドメインオブジェクト用の名前空間とそのインタフェース用の異なる名前空間を持つプロジェクトを作成しています。私は、いくつかのサンプルプロジェクトをオンラインで見ていて、ドメインオブジェクトのインタフェースと具体的な実装をグループ化し、それがどのように機能しているかを見たいと思っていました。 – Cognitronic

関連する問題