【发布时间】:2015-05-07 00:20:08
【问题描述】:
我正在使用 Asp.net MVC 5、Web Api 2 和实体框架创建一个项目。我用洋葱架构设计它,所以我有一个 DAL、服务和 UI 层。
我的 DAL 层包含 UnitOfWork 和存储库,我的服务层包含业务案例服务。
但我有以下问题:
在哪里使用工作单元保存(或提交)方法?,在服务层还是在 UI 层? 如果我在服务层使用它,我该如何处理跨多个服务的情况?
我正在使用 DTO 进行 webapi 操作,服务层应该返回 DTO 还是应该在 UI 层中完成映射?
DTO 应该在单独的项目中还是在 UI 项目中?如果它们在单独的项目中,我应该使用 MVC 属性进行验证吗?
【问题讨论】:
-
EF 上的存储库不好,mkaaaay?
-
@Sippy 如果您曾经让经理/架构师在项目中期改变他/她对您的数据访问技术的想法,那么您就会知道在数据访问框架上拥有一个抽象层的价值。因此,不,EF(或任何 ORM)之上的存储库如果封装了 ORM,则还不错。
-
@Sippy 这还不错,大多数时候没有必要,但我确实需要抽象所有实体框架实现,因为 BrianDriscoll 说最终可能会有数据访问更改。
-
@BrianDriscoll 同意。我经常创建相同的东西,以便可以在 Mongodb 和 SQL Azure 之间进行交换。我认为 Sippy 可能指的是每个类型模式的存储库的不良做法。
-
也许是对问题 1 的提示,在 DDD(域驱动设计)中,您区分 应用程序服务 和 域服务。 应用程序服务将代表单独的用例,而域服务表示对您的域模型的操作。在这个空间中,工作单元通常在 应用程序服务 中进行管理,该服务可以组合多个 域服务 以在您的应用程序中实现给定的用例。
标签: c# asp.net-mvc asp.net-web-api n-tier-architecture onion-architecture