以前のプロジェクトに似た新しいプロジェクトを開始しようとしています。古いデザインをコピーすることはできますが、古いデザインに満足しているわけではありません。
これは、バックエンドに Entity Framework を備えた .Net 3.5 (Winforms MDI) の上に構築された「標準的な」ビジネス システム (販売、棚卸、倉庫管理など) です。
すべてのフォームはベースフォーム (Windows.Form を継承) から継承します。このフォームは、最初の呼び出しで新しい ObjectContext をインスタンス化する ObjectContext というプロパティを公開します。これはかなり良い UnitOfWork を構成し、すべてのデータアクセスを各フォームで分離しています。
でも。
すべてのクエリと一般的な CRUD を「貧しい人々 のリポジトリ」にカプセル化しました。これらのリポジトリは、ObjectContext のプロパティとして公開されます。
したがって、フォームにバインドして注文する場合は、OrderLinesGrid = ObjectContext.OrderRepository.GetOrderLinesByID(orderID) を呼び出します。
OrderRepository は、このように、フォーム用に作成された objectcontext への参照を取得します。
(私の部分的な ObjectContext クラスで)
Private _OrderRepository as OrderRepository
Public ReadOnly Property OrderRepository as OrderRepository
Get
if _orderrepository is nothing then
_orderrepository = New OrderRepository(me)
end if
return _orderrepository
End Get
End Property
これについて私が気に入らない点は次のとおりです。
リポジトリへの呼び出しは、ObjectContext を通じて行われます。したがって、クエリと必要なデータアクセスレイヤーの間の抽象化が得られません。
ドメインの新しい型ごとに、ObjectContext にプロパティを作成する必要があります
OrderRepository への呼び出しは、ドメイン オブジェクトを返すだけで、それがどのように保持されるかを気にする必要はありません。また、各リポジトリに独自の ObjectContext を持たせることはできません。これは、Country を Order.Country プロパティに参照するときにオブジェクトをアタッチおよびデタッチする必要があるためです。
このデザインに関するアイデアやフィードバックをいただければ幸いです :)