ASP.NET MVC解决方案组织

时间:2009-05-07 01:18:41

标签: asp.net-mvc s#arp-architecture

我正在寻找创建一个相当大规模的ASP.NET MVC项目,我希望将其分解出来,以便它不是一个项目和一个程序集。

我看了Oxite如何组织他们的组织(http://oxite.codeplex.com/Wiki/View.aspx?title=architecture),但我想知道其他人是如何做到的。有什么建议吗?

目前,我正在考虑与Oxite非常相似的事情:

项目 - 此项目包含模型层,其中包括服务和存储库的模型,配置类和接口。这里应该没有太多的应用程序逻辑,主要是数据结构。

Project.Core - 此项目包含控制器和路由的所有代码,包括过滤器和结果。此处还包括ViewData模型。

Project.Site - 此项目包含Views,images,javascript和所有其他静态非代码文件。这里应该有最少的C#代码,大多数应该存在于Project.Core

2 个答案:

答案 0 :(得分:8)

您可能想查看S#arp Architecture如何将其控制器,服务和核心拆分为具有相应测试项目的项目。

答案 1 :(得分:2)

以下是我们打破项目的方式。这个ASP.NET MVC非常接近于推出,我们在此过程中学到了一些东西。我已经说明了为什么每个项目也是分开的。

Project.Models - MVC中的M,它包含您的所有业务类。如果你可以管理它(你真的应该),这里应该没有持久性或与Web服务相关的类。您当然可以在此项目中定义用于数据访问的接口。检查此项目是否“干净”数据访问的一种快速方法是检查是否需要在此项目中引用数据访问DLL,如NHibernate。 原因:理论上,您应该能够捆绑此项目并在其他任何地方使用这些类,即使您切换到不同的UI,如控制台等。

Project.Site - 此项目包含所有JavaScript,CSS,View等,与视图相关的所有内容。 原因:如果您有网站设计师,您可以让他/她访问此项目并让他工作。

Project.Controllers - MVC中的C,它包含所有控制器以及ModelBinder。 原因:模型,视图和控制器的三个不同项目使问题泄露更加困难。

Project.Tests - 将所有单元测试保存在单独的项目中会强制您仅测试公共接口;在我看来,单位测试是一种很好的做法。

Projects.Services - 所有Web服务,与持久性相关的代码都在这个项目中。

目前,任何Utility类都会进入Project.Models,但我认为为Utility类提供单独的解决方案会更好,只需将它们作为对已编译程序集的引用导入。