我对整个设计概念很陌生,在过去几周的阅读中,我收集了很多信息,但似乎分散和矛盾。术语好坏参半,我只是很难理解这一点。
我使用的模式是这样的,假设流程如下:
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 需要一个“接受答案”复选框旁边的“给我买啤酒”按钮 :)