この質問は以前にも答えられているように見えるかもしれませんが、答えはケースごとに異なると感じているため、いくつかの投稿を読んだ後、私のアーキテクチャに最適なケースはわかりません。
このコンポーネントを実装するすべてのアプリケーションで利用できるデータ モデルと基本機能を備えたコンポーネント ライブラリがあります。
このコンポーネントには、ディスクからファイルをロードして処理するインターフェイス IReader と、データベース アクセスと CRUD 操作を提供する IDataMapper を持つ境界があります。オブジェクトを比較するための IObjectComparison、XML シリアル化のための IXMLSerialization などの特定の機能のための他のいくつかのインターフェイス。
これらのインターフェイスの定義をどこに保存すればよいかわかりません。
オプションは次のとおりです。
1)- コア ライブラリ内で、実装を作成するときに、このコア コンポーネント内に実装ライブラリを含める必要があります。実装から切り離して維持したいと考えています。
2)- 別のライブラリ プロジェクト (アセンブリ)。そこにあるすべてのインターフェースは、コアコンポーネントに含まれ、実装ライブラリに含まれています。
3) - 実装ライブラリでは、コア コンポーネントに実装ライブラリを含める必要があります。
合理的に分離されていると思われる唯一のケースは、すべてのインターフェイスを別のアセンブリ ライブラリに配置した場合です。コア コンポーネントには、必要な実装が含まれています。
最良の選択肢の長所と短所は何だと思いますか? 私が達成したいのは、分離されたアーキテクチャだけです。
だから私がするとき
コンストラクタ:
CoreComponent(IReader Reader, IDataMapper Mapper)
new CoreComponent(WindowsReader, SQLServerMapper)
WindowsReaderまたはSQLServerMapperをコア コンポーネントに含める必要はありません。
乾杯。