我们即将启动一个与前一个项目类似的新项目。我可以复制旧设计,但我对旧设计不太满意。
它是建立在 .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 属性时附加和分离对象。
我将不胜感激有关此设计的任何想法和反馈 :)