使用抽象工厂或部分类之间的二元选择

时间:2012-11-28 23:36:33

标签: c# .net entity-framework architecture domain-driven-design

我正在使用Entity Framework Model First方法构建CRUD应用程序。我的应用程序的结构是UI LAYER和DAL都依赖于Domain Layer,而域层不依赖于任何东西。 Domain层仅公开存储库和域对象接口。存储库在DAL中实现,并通过依赖注入提供给域层。作为所有存储库,我的存储库公开了诸如getCustomer,deleteCustomer等函数,但由于这些函数是在DAL中实现的,因此DAL必须能够创建符合Domain层中接口的对象。现在我的二元选择是如何让它做到这一点:我应该使用抽象工厂并将它们注入DAL或扩展部分生成实体的定义并使它们实现域层公开的接口?

1 个答案:

答案 0 :(得分:1)

  

域层仅公开存储库和域对象接口。

在此类型或体系结构(hexagonal architecture)中,域对象不应具有接口,只应具有存储库。相反,让DAL直接创建(重构)域对象。将域对象抽象到接口中没有任何好处,只有不必要的复杂性,例如工厂。

另外,正如Heather所指出的,抽象存储库通常也是一种不必要的复杂性。在整个实现中实现真正可移植的存储库抽象几乎总是徒劳的。在我看来,存储库抽象的核心好处是可以在没有接口的情况下实现的封装 - 只需直接引用实现类。