我是否了解ASP.NET MVC和Entity Framework的架构设计?

时间:2017-06-12 12:58:44

标签: c# sql-server asp.net-mvc entity-framework

我目前正在使用Active Directory和SQL Server 2008的Intranet网站上工作。我选择了 ASP.NET的MVC 设计模式,我现在正试图弄清楚如何获得适当的架构我的项目涉及使用实体框架的数据访问部分。我一直在苦苦挣扎几天,以便不要走错方向(知道我是我公司唯一的开发人员,这是我的第一次经历,没有人知道最近的框架)。我已经阅读了有关架构以及如何正确执行的内容,但我不确定我是否正确掌握了所有内容(How do architect an ASP.Net MVC app with EF?)。

以下是我在想的事情,每个层都有自己的项目(请原谅我的绘图技巧):

Controller(MVC Project) ---uses---> Service Layer (Project) ---uses--> EFDal (Project)
               ^                         |        ^                          |
               |                         |        |                          |
               |<-------<-----returns ViewModel   |<---------<------returns Query Result

EFDal是EntityFramework数据访问层。

根据我的理解,服务层将包含调用DAL的方法,而DAL又用于访问数据。

你认为我的做法有问题吗? 我是否正确地说服务层,是否包含所有操作? (例如:在DB中搜索用户 - &gt;服务层通过调用返回值的EFDal启动搜索,然后Service Layer将ViewModel返回给控制器) (另见:Creating a Service Layer for my MVC application?

最后,我的服务层类是否应该实现接口以实现持久性目的?

作为一名学生,我们只将MVC模式用于我们的项目,并且从未使用新项目扩展解决方案,因为我们从事小型项目。在这里,我觉得错误的架构将最终导致灾难性的可维护性。谢谢你的帮助!

1 个答案:

答案 0 :(得分:2)

你几乎是在正确的方向。但是,在这种情况下,ViewModel应位于应用层,即您的MVC图层。服务层应该返回数据传输对象,通常称为DTO

ViewModel视为为POCO构建的简单View类,它可以是来自您服务的各种服务返回的各种DTO的集合层

DTO

的好处
  1. 您不是直接公开您的域名实体,即您的EntityFramework POCO类。但是,可以针对足够小的项目进行案例处理,以避免DTO一起使用。
  2. 如果将来您决定在WebAPI项目中添加MVC功能,例如,对于iPhone应用程序。新应用程序使用也使用服务层的WebAPI,大多数服务层代码可以重复使用,因为它们返回DTO类,而不是为ViewModel构造的View {1}}本身。
  3. 对于您的数据访问层,没有人比这家伙更好地解释。 Entity FrameWork With Repository Pattern

    至于项目结构,我建议洋葱建筑。 Onion Architecture。如果你能够很好地理解这篇文章,那么你应该全力以赴。