winforms - 在 WinForms MDI 中使用具有存储库模式的 Entity Framework

标签 winforms entity-framework repository-pattern abstraction unit-of-work

我们即将启动一个与前一个项目类似的新项目。我可以复制旧设计,但我对旧设计不太满意。

它是建立在 .Net 3.5 (Winforms MDI) 之上的“标准”业务系统(销售、盘点、仓储等),后端有 Entity Framework 。

所有表单都继承自基本表单(继承 Windows.Form)。该表单公开了一个名为 ObjectContext 的属性,该属性在第一次调用时会实例化一个新的 ObjectContext。我认为这构成了一个非常好的 UnitOfWork,在每种形式中都隔离了所有数据访问。

然而。

我已将所有查询和常见的 CRUD 封装在“可怜的人存储库”中。这些存储库作为 ObjectContext 的属性公开。

因此,如果我想绑定(bind)并订购一个表格,我会调用
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

我不喜欢的是:
  • 调用存储库
    通过对象上下文。因此,我做
    之间没有抽象
    查询和数据访问层 I
    想。
  • 对于我的域 I 中的每种新类型
    需要在我的创建一个属性
    对象上下文

  • 我对 OrderRepository 的调用应该只返回域对象,而不用担心它是如何持久化的。另外,我不能让每个 Repository 都有它自己的 ObjectContext,因为这需要我在将 Country 引用到 Order.Country 属性时附加和分离对象。

    我将不胜感激有关此设计的任何想法和反馈 :)

    最佳答案

    我建议你研究"onion" principle , Repository pattern和 Luw 模式。
    网上有很多例子。

    本质上,您使用 POCO 模型核心项目。没有对 DAL 项目的引用。
    您在 CORE 项目中声明 Repository 和 luw 模式的接口(interface)。

    所以现在

    UI layer -> instantiate context and DAL Object eg repository -> inject into CORE services.
    

    与此方法相关的还有控制反转或依赖注入(inject)模式。

    如果您针对 Dummy Repositories 使用测试驱动开发,则可以确保遵循设计原则。

    关于winforms - 在 WinForms MDI 中使用具有存储库模式的 Entity Framework ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2302464/

    相关文章:

    winforms - 如何避免在* .designer.cs和* .resx中进行不必要的更改?

    c# - 调整大小和移动具有透明度的图像控件

    asp.net-mvc - 使用 MVC 和流利的 Nhibernate,如何在将 ViewModel 上的唯一字段绑定(bind)到我的域对象并保存它们之前验证它们?

    linq - 使用具有规范模式的预先加载

    vb.net - DoEvents 是否只影响当前线程?

    c# - 为什么我会看到使用 native 代码的速度提高了约 20%?

    c# - 无法将 DateTime 从 EF "Code First"保存到 MySQL 远程数据库

    entity-framework - Entity Framework 将 DateTimeOffset 映射到 SQL Server DateTime

    visual-studio-2010 - VS 2010 SP1 中缺少 ADO.net Entity Framework 模板

    asp.net-mvc-3 - Entity Framework 插件架构推荐