什么是asp.net中有点大的网站推荐的解决方案结构

nac*_*10f 6 asp.net asp.net-mvc projects-and-solutions separation-of-concerns visual-studio

我目前正在尝试重构一个根本没有任何分离的项目(asp.net mvc).只是文件夹:s

  • 该项目有一堆EF Code First类(People.cs,Exam.cs,Message.cs等)
  • 该项目有几个存储库(都使用EF数据上下文)
  • 当然还有很多控制器和视图模型

我们有一个测试项目,但我们并不擅长TDD,所以它不是我们现在正在努力的东西.

我希望对项目必须解决的不同职责有一个更清晰的分离,并希望对实现这一目标的良好项目结构提出一些建议.

请帮忙.提前致谢

jdm*_*nty 12

我建议遵循域驱动设计(DDD),并建议一种方法来创建以下项目:

Company.Project.Web< - 您的MVC应用程序,尽管您仍然可以使用WebForms Company.Project.Domain < - 数据传输对象(DTO),ViewModel,业务逻辑,事件 Company.Project.Data < - 存储库接口

Company.Project.Data.EF < - EntityFramework特定的存储库实现 Company.Project.Model < - 您的EF CodeFirst类

Company.Common < - 公用事业和/或扩展的常见项目

我建议您从模式和实践团队中查看Project Silk http://silk.codeplex.com/.DDD,Repository和MVC的很好的参考实现,以及HTML 5和jQuery(vNext)的混合.


Nic*_*sen 11

我们使用与jdmonty提到的类似的设计,但有点简单.我们执行以下操作:

  • ApplicationName.Web - MVC应用程序
  • ApplicationName.Services - 业务逻辑
  • ApplicationName.Domain - EF CodeFirst类和作用于它们的存储库
  • ApplicationName.Common - 多个项目使用的类和实用程序
  • ApplicationName.Tests - 测试各种项目

Web项目依赖于Services项目.Services项目依赖于Domain项目.

  • 我们将ViewModel保留在Web项目中,因为正如您所提到的,它们根本不应与Service层进行交互.ViewModel仅用于在视图和控制器之间传输数据. (3认同)
  • @FernandoAyrosaVezzali你提出了一个很好的观点.我们对ViewModel使用DataAnnotations,可能会调用业务逻辑,因此您开始将业务逻辑放在应用程序视图级别.虽然人们可能会认为这打破了关注点的分离,但人们不得不在某处划清界线. (2认同)