我目前正在使用Active Directory和SQL Server 2008的Intranet网站上工作。我选择了ASP.NET的MVC设计模式,现在我正试图弄清楚如何为我的项目获得适当的体系结构,以实现数据访问部分使用实体框架。为了不去错误的方向(我知道我是我公司唯一的开发人员,这是我的第一次经历,没有人知道最近的框架),我一直在努力奋斗几天。我已阅读过有关架构及如何正确执行此操作,但我不确定是否正确掌握了所有内容(How do architect an ASP.Net MVC app with EF?)。我是否了解ASP.NET MVC和实体框架的架构设计?
这是我在想什么做的,有自己的项目中的每个层(原谅我的绘画技巧):
Controller(MVC Project) ---uses---> Service Layer (Project) ---uses--> EFDal (Project)
^ | ^ |
| | | |
|<-------<-----returns ViewModel |<---------<------returns Query Result
EFDal是的EntityFramework数据访问层。
从我的理解,服务层将包含方法,调用DAL反过来用于访问数据。
您是否在我的方法中看到错误?
我说得对服务层,是一个包含所有操作? (例如:搜索的数据库用户 - >服务层通过调用EFDal其返回值展开搜索,并反过来服务层返回一个视图模型控制器) (参见:Creating a Service Layer for my MVC application?)
最后,如果我的服务图层类实现用于持久性目的的接口?
作为一名学生,我们只在项目中使用了MVC模式,并且从不需要通过新项目扩展解决方案,因为我们从事小型项目。在这里,我觉得对架构的误解会导致灾难性的可维护性。谢谢你的帮助!
根据应用程序的大小,有很多可能的体系结构。对于较小的应用程序,您可能会使用引用EF的单个MVC项目。我们大多数都是中等大小的,我们为EF的东西创建App.Data(上下文,流利,迁移)App.Entities为我们的POCO模型,App.MVC为我们的UI,然后使用Automapper创建ViewModels。 [CQRS](https://msdn.microsoft.com/en-us/magazine/mt147237.aspx)是另一种选择。 –
@SteveGreene谢谢你的回答。这就是我要做的。尽管没有使用过Automapper,但并不确定我需要它,我所有的数据表都非常简单,我只是有很多。至少从我所了解的Automapper用于复杂对象?我真的不能说应用程序有多大,但公司有4.5万名员工(和一名实习生在做这类事情......)以及许多通过Active Directory或SQL Server进行管理的不同操作,所以我需要很好的表现。 –
性能和体系结构通常会进行折衷。 EF不是最高性能的数据访问技术。见[这里](https://stackoverflow.com/questions/8347670/entity-framework-is-too-slow-what-are-my-options)。这是SO与Dapper一起的原因之一。 –