我目前正在使用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模式用于我们的项目,并且从未使用新项目扩展解决方案,因为我们从事小型项目。在这里,我觉得错误的架构将最终导致灾难性的可维护性。谢谢你的帮助!
答案 0 :(得分:2)
你几乎是在正确的方向。但是,在这种情况下,ViewModel
应位于应用层,即您的MVC
图层。服务层应该返回数据传输对象,通常称为DTO
。
将ViewModel
视为为POCO
构建的简单View
类,它可以是来自您服务的各种服务返回的各种DTO
的集合层
DTO
POCO
类。但是,可以针对足够小的项目进行案例处理,以避免DTO
一起使用。WebAPI
项目中添加MVC
功能,例如,对于iPhone应用程序。新应用程序使用也使用服务层的WebAPI
,大多数服务层代码可以重复使用,因为它们返回DTO
类,而不是为ViewModel
构造的View
{1}}本身。对于您的数据访问层,没有人比这家伙更好地解释。 Entity FrameWork With Repository Pattern
至于项目结构,我建议洋葱建筑。 Onion Architecture。如果你能够很好地理解这篇文章,那么你应该全力以赴。