Entity framework 架构设计-MVC、EF、Rep、UoW、WCF、DI

Entity framework 架构设计-MVC、EF、Rep、UoW、WCF、DI,entity-framework,repository,poco,asp.net-mvc-4,unit-of-work,Entity Framework,Repository,Poco,Asp.net Mvc 4,Unit Of Work,建筑设计 正在寻找一些关于我正在整合的新架构的建议 要使用的工具: MVC4(如果你有一个MVC3的例子就足够了) 实体框架4.1(EF) 存储库模式 工作单位 POCO(T4自动生成) WCF(用于CRUD函数。使用具体的服务类检索数据) 依赖注入(Ninject) 模拟(Moq) 任何其他好的工具都让我知道 如果EF证明不值得,公司将使用EF进行ORM,NHibernate将是第二个选择 我到目前为止所做的事情 1) 演示项目(MVC4、服务DI、服务频道设置、视图模型)->引用域项目(

建筑设计

正在寻找一些关于我正在整合的新架构的建议

要使用的工具:

  • MVC4(如果你有一个MVC3的例子就足够了)
  • 实体框架4.1(EF)
  • 存储库模式
  • 工作单位
  • POCO(T4自动生成)
  • WCF(用于CRUD函数。使用具体的服务类检索数据)
  • 依赖注入(Ninject)
  • 模拟(Moq)
任何其他好的工具都让我知道

如果EF证明不值得,公司将使用EF进行ORM,NHibernate将是第二个选择

我到目前为止所做的事情

1) 演示项目(MVC4、服务DI、服务频道设置、视图模型)->引用域项目(2)

2) 域项目(POCO实体、域对象、服务接口)->引用业务项目(3)

3) 业务项目(WCF服务、具体服务类、工作单元)->参考数据项目(4)

4) 数据项目(EF、Context+.edmx、存储库及其接口)->查看数据库

问题1:这是一个好的项目分解吗? 问题2:这是一个好地方,可以把上面提到的项目放在括号里吗? 问题3:有什么应该是我完全忽略的地方吗

一些旁注: 我们有大量的记录集,很容易检索到超过100000条的记录。我们并没有使用WCF服务,而是调用一个具体的服务类来提高性能。我们将最大消息大小加上通过WCF检索记录所用的时间增加了一倍

问题4:有没有更好的方法?性能是关键。可重用性并不重要

域对象有一个单独的属性,即它所对应的POCO。示例:我有一个名为“Order”的域对象。它有一个单独的属性“OrderPOCO”,它保存所有属性。然后,域对象具有验证方法并引用必要的CRUD函数

问题5:复杂的验证,如“该记录是否已经存在”应该放在哪里?它能在服务本身中完成吗

问题6:是否需要域对象?据我所知,大多数其他示例都没有域模型,如果它们使用的是POCO。只是对这个想法有点困惑

对不起,这太长了。任何答案都将非常感谢,但一个全面的答案将是指数级的更有帮助。我们可以选择工具来做不同的事情,但让它们正确地协同工作是困难的部分

欢迎批评


谢谢大家

问题1、2和3: 我经常看到只包含三层的架构布局。但是,如果您想保持域项目层和业务项目层的分离和解耦,那么您可以在不影响另一个的情况下更改其中一个,当然您应该将它们保持在单独的程序集中。但是PoCO实体、工作单元和具体服务实现常常与应用程序的域和业务规则紧密相关,因此您可以考虑将这两个层合并为一个程序集。 我会在业务层中将reposiroty接口向上移动,从业务层删除对数据层的引用,并让UI层引用数据层。UI层然后构造函数将具体的报告注入域/业务层。这使您的域/业务层没有对依赖于技术的数据程序集的引用

问题4: 如果性能很重要,我只需要调用具体的服务类

问题5: 我不知道你所说的“复杂验证”是什么意思

问题6:
EF可以为您自动生成POCO,并将它们放置在.edmx以外的另一个程序集中。见文章。通过这种方式,您的POCO仅依赖T4模板,而不与EF硬耦合。

检查必填字段的验证采用正确的格式(最小/最大长度、电子邮件地址等)。。。我们称之为简单验证。在尝试添加记录之前,我们还希望验证数据库中是否已经存在记录。无法复制唯一字段,因此会导致错误,但我们希望避免错误,并在尝试添加记录之前运行验证查询以查看该记录是否存在-谢谢你的帮助