实体框架POCO +推荐模式

haz*_*nli 3 asp.net-mvc design-patterns entity-framework poco

我们非常喜欢EntityFramework(CTP5),并将它与ASP.NET MVC3一起使用.

我不喜欢的是; 事情在一起混合在一起.

我可以将DisplayAttribute,RequiredAttribute,RangeAttribute,CompareAttribute放在同一个类中,这意味着我在数据库验证,一些业务逻辑UI之间进行混合.我甚至可以放置ScriptIgnore属性来将其自定义为Json DTO对象.所以我可以使用相同的POCO类来表示Persistance,Presentation,DTO和Business Object,以及我的domian模型.

您使用EF POCO + MVC3工具集遵循哪些设计模式.你有几层?你在课程中添加了什么样的责任(你的POCO课程也是你的领域模型)

Dar*_*rov 8

我使用View Models来解决这个问题.验证和UI表示属性将转到视图模型.在此模式中,控制器使用存储库来获取EF模型,将此EF模型映射到视图模型(我使用AutoMapper)并将视图模型传递给视图.由于视图模型包含所有UI表示属性,因此视图的行为与预期一致.每个视图都必须有自己的视图模型.这意味着您可以拥有与同一EF模型关联的多个视图模型,但包含不同的属性子集,并根据视图的特定要求显示格式设置属性.

该过程也是相反的:控制器从视图中接收视图模型作为参数.它将视图模型映射回模型,并将EF模型传递到存储库.UI验证属性在视图模型上处理,因为您可以在不同视图中具有不同的验证要求:例如,考虑插入/更新视图.在插入视图中,您将创建一个新实体,因此不需要Id属性.在这种情况下,您甚至不会在视图模型上具有Id属性.相反,在更新视图中,将需要Id属性.