Sam*_*Sam 23 entity-framework poco repository-pattern service-layer asp.net-mvc-3
我是这个整体设计概念的新手,在过去几周的阅读中,我收集了大量的信息,但它似乎分散且矛盾.条款喜忧参半,我只是很难想到这一点.
我使用的模式是这样的,并假设流程如下:
MVC应用程序
 
控制器处理来自客户端的给定视图的请求/响应.在控制器操作方法内部,它们联系服务(服务层)并请求对象以构建视图模型,并从视图模型中检索对象.
视图模型
 
我在视图中使用强类型视图模型.
是视图模型DTO吗?它们应该只包含Name,AddressLine1,Address City等简单属性,还是应该包含复杂属性,多个对象等.
是视图模型中的验证.如果是这样,它将是必需的字段,字段长度等验证.然后验证用户名已经存在,或者您需要与服务层中的其他对象进行交互?
视图模型可以只包含从EF返回的POCO类,还是应该使用AutoMapper?
如果使用AutoMapper和DTO,DTO是POCO类的克隆吗?
您会在控制器,视图模型或下面的服务层中进行映射吗?
服务
 
对我来说,服务是与存储库联系的对象,用于从EF获取POCO对象.这就是我所有业务逻辑的所在.一旦服务将对象传递回存储库以持久保存到EF,它们就被视为有效对象.它是否正确?
存储库
 
它们中没有业务逻辑,它们仅用于在服务和EF之间传输对象.它是否正确?我在这里使用通用存储库实现接口.那么你可以扩展通用存储库以满足特殊需求吗?
关于术语的问题
 
1)业务对象是否等于域对象?域对象应包含多少逻辑?
2)域模型是EF模型吗?我正在使用Model-First方法.
3)依赖注入 - 我应该使用它吗?我理解它是如何工作的,只是没有得到真正的好处.我和Ninject一起玩.
我认为社区将受益于某种包含代码示例的所有最佳实践的wiki.那里有类似的东西吗?很多样本都非常简单,很多微软样本即使在声称时也不使用这种模式.
提前感谢所有拥有并将帮助我的人.
顺便说一句 - 我认为StackOverflow需要一点,"接受答案"复选框旁边的"买我一个啤酒"按钮:)
Dar*_*rov 30
是视图模型DTO吗?
可以被认为是控制器和视图之间的一种数据传输对象.
它们应该只包含Name,AddressLine1,Address City等简单属性,还是应该包含复杂属性,多个对象等.
理想的简单属性,但也可以聚合其他视图模型,但没有模型(例如:像EF模型).
是视图模型中的验证.
有两种类型的验证逻辑:进入服务层的业务验证(例如用户名已存在)和进入视图模型的UI验证(例如:需要用户名).
视图模型可以只包含从EF返回的POCO类,还是应该使用AutoMapper?
视图模型中没有EF.视图模型是具有简单属性的POCO类,其他复杂属性指向其他视图模型.它们还可以包含方法,以便正确格式化将在这些模型所针对的特定视图上呈现的数据.
如果使用AutoMapper和DTO,DTO是POCO类的克隆吗?
不确定我理解这个问题.
您会在控制器,视图模型或下面的服务层中进行映射吗?
控制器.
对我来说,服务是与存储库联系以从EF获取POCO对象的对象.这就是我所有业务逻辑的所在.一旦服务将对象传递回存储库以持久保存到EF,它们就被视为有效对象.它是否正确?
是.
域模型是EF模型吗?
如果您使用EF Code第一种方法,则为yes,否则为no(如果EF使用EF特定属性和类污染域).
它们中没有业务逻辑,它们仅用于在服务和EF之间传输对象.它是否正确?
是.
我在这里使用通用存储库实现接口.那么你可以扩展通用存储库以满足特殊需求吗?
是的,但不要太花哨.通常,存储库用于CRUD操作.它的服务应该包含业务逻辑.
业务对象是否等于域对象?
是.
域对象应包含多少逻辑?
这取决于您正在使用的特定项目的域逻辑数量,以及您可以从您或其他人工作的旧项目中重用的任何现有域逻辑.
依赖注入 - 我应该使用它吗?
是的,一点没错.
我理解它是如何工作的,只是没有得到真正的好处
它在应用程序的不同层之间提供了较弱的耦合,这使得它们更容易在其他项目中进行单元测试和重用.
我认为社区将受益于某种包含代码示例的所有最佳实践的wiki.
我同意.
那里有类似的东西吗?
我对此表示怀疑.
顺便说一句 - 我认为StackOverflow需要一个"接受答案"复选框旁边的"买我一个啤酒"按钮
不能同意更多.
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           4811 次  |  
        
|   最近记录:  |