【发布时间】:2011-07-05 10:25:22
【问题描述】:
我对整个设计概念很陌生,在过去几周的阅读中,我收集了很多信息,但似乎分散和矛盾。术语混杂在一起,我只是很难理解这一点。
我使用的模式是这样的,假设流程如下:
MVC 应用程序
控制器处理来自客户端对给定视图的请求/响应。在控制器操作方法中,它们联系服务(服务层)并请求对象来构建视图模型,然后将视图模型中的对象发送回来。
查看模型
我在视图之间使用强类型视图模型。
视图模型是 DTO 吗?它们应该只包含简单的属性,如 Name、AddressLine1、Address City 等,还是应该包含复杂的属性、多个对象等。
是视图模型中的验证。如果是这样,是否会像必填字段、字段长度等进行验证。然后像用户名这样的验证已经存在,或者您需要与服务层中的其他对象进行交互?
视图模型可以只包含从 EF 返回的 POCO 类,还是应该使用 AutoMapper?
如果使用 AutoMapper 和 DTO,DTO 是 POCO 类的克隆吗?
你会映射到控制器、视图模型还是下面的服务层?
服务
对我来说,服务是联系存储库以从 EF 取回 POCO 对象的对象。这是我所有的业务逻辑所在。一旦服务将对象交回存储库以持久保存到 EF,它们就被视为有效对象。这是正确的吗?
存储库
它们中没有业务逻辑,它们仅用于在服务和 EF 之间传输对象。它是否正确?我在这里用通用存储库实现接口。那么您可以扩展通用存储库以满足特殊需求吗?
关于术语的问题
1) 业务对象是否等于领域对象?域对象应该包含多少逻辑?
2) 域模型是 EF 模型吗?我正在使用模型优先的方法。
3) 依赖注入 - 我应该使用它吗?我了解它是如何工作的,只是没有得到真正的好处。我在玩 Ninject。
我认为社区会从某种 wiki 中受益,该 wiki 包含代码示例的所有最佳实践。那里有类似的东西吗?那里的许多示例都非常简单,而且许多 Microsoft 示例即使声称使用这种模式也没有使用。
在此先感谢所有已经并将帮助我的人。
顺便说一句 - 我认为 StackOverflow 需要在“接受答案”复选框旁边有一个“给我买啤酒”按钮 :)
【问题讨论】:
标签: entity-framework asp.net-mvc-3 repository-pattern poco service-layer