私はエンティティ層、DAL層、ビジネス層、およびUI層で構成される、.NETのN層アーキテクチャを実装しています。プロジェクト構造 - 相互参照レイヤー
エンティティは、プリミティブフィールドに加えて、ナビゲーションプロパティも含みます。この例はInvoiceLineプロパティを持つInvoiceエンティティで、親Invoiceエンティティに関連付けられたすべてのInvoiceLineエンティティを返す必要があります。
これらのInvoiceLinesに適用する必要があるビジネスロジックが永続性メディアから取得され、コードを複製したくないという事実のため、InvoiceエンティティのInvoiceLinesプロパティは、 IEnumerableを返すビジネスロジック内のGetInvoiceLinesByInvoiceIDメソッドに渡します。
は私の問題はこれです - エンティティのプロジェクトは、ビジネスのプロジェクトに依存しており、ビジネスのプロジェクトは、それによって相互参照を導入し、エンティティのプロジェクトに依存するため、私は、別のプロジェクトに層を分離することはできません。私は現在、3つのレイヤー(Entities、DAL、Business)を同じプロジェクトに収めていますが、これはうまくいきますが、他のソリューションの中でEntitiesだけを共有することはできません。
私は、相互参照層によって、このように私はいくつかの原則に違反してることを理解するが、それはそれらに適用されるビジネスロジックと私のエンティティに取り込まナビゲーションプロパティを持つことが非常に便利です。
は、誰もがより良い方法、または私は別のプロジェクトで、私の層を維持しながら、これを行うことができますいくつかの方法を提案してくださいことはできますか?
乾杯
明確にするために、エンティティレイヤーだけをSQLCLRプロジェクトと共有する必要があります。エンティティ、DAL、ビジネスを含む「レイヤー」プロジェクト全体に、SQLCLRでサポートされていない参照アセンブリが多数含まれているため、アセンブリ。良い例えば – Hoodlum