是否有针对ASP.NET MVC生产应用程序的建议解决方案结构

时间:2010-03-25 16:45:19

标签: asp.net-mvc projects-and-solutions structure code-organization solution

通常,我不喜欢将代码(BaseClasses或DataAccess Code)保存在ASP.NET站点的App_Code目录中。我通常会把这些东西放到MySite.BusinessLogic& MySite.DataAccess DLL分别为。

我想知道我是否应该为ASP.NET MVC做同样的事情。

按照

的方式组织解决方案会更好吗?
  • MySite.Common - DLL - (基于.NET系统Dll构建的基本功能)
  • MySite.DAL - DLL - (DataAccessLayer& DBML Files)
  • MySite.Models - DLL - (MVC模型,例如Repository Classes)
  • MySite.Controllers - DLL(使用模型的MVC控制器)
  • MySite - ASP.NET MVC网站。

或者我错过了什么......大概,我会失去一些不错的(添加视图,转到控制器,已添加的上下文菜单项)

3 个答案:

答案 0 :(得分:3)

我只使用MVC完成了一些项目,但使用您的命名结构我们做了以下事情:

  • MySite.Common - DLL - (基于.NET系统Dll构建的基本功能)
  • MySite.DAL - DLL - (DataAccessLayer& DBML文件和Repostiory模型)
  • MySite.Models - 将此作为一部分 MVC网络应用程序和只有 特定于没有的视图的模型 每个人都要一对一地映射 存储库模型。
  • MySite.Controllers - 包含在内 MVC应用程序,但可以链接到业务层
  • MySite - MVC app。

所以最后在我的MVC解决方案中有以下项目:

  • MVC Web App - 包含控制器,用于将DAL数据映射到的视图模型。
  • 常用 - 可在其他应用中使用的功能
  • DAL - 包含所有与数据访问相关的数据,包括包装类
  • BL - 可选取决于是否需要大量业务特定逻辑
  • 测试

编辑:我的DAL总是输出包装对象(如果使用Linq2Sql,那么我将自动生成的类直接映射到DAL中的类)。 MVC应用程序中存在的唯一类是表示viwes的容器,主要用于将数据传递给视图。

如果您的移动应用使用类似的视图,我不会尝试重新使用您的MVC应用视图中的相同类。您需要管理的细微差别总是存在,您应该能够使用DAL类映射到移动视图,这些视图遵循保持视图类本地化为应用程序的模式。

答案 1 :(得分:3)

在大多数情况下,以下结构可以正常工作:

  • MySite.BusinessLogic(控制器,型号,存储库,......)
  • MySite.BusinessLogic.Tests(控制器,模型,存储库的单元测试......)
  • MySiteA(观点,静态内容)
  • MySiteB(视图,静态内容)

MySiteA和MySiteB可能是同一网站重用业务逻辑功能的两种风格。

从性能角度来看,您应该比许多小型装配更喜欢更少的大型装配。

答案 2 :(得分:2)

我们做的事情有点不同

  • [数据库名称] .Database.DLL(特定数据库的DBML文件)
  • [数据库名称]。服务。[问题域] .DLL(包含模型,服务和存储库)
  • [数据库名称]。服务。[问题域名] .Tests.DLL
  • [数据库名称] .Services.DLL(当上述所有内容完全适合单个服务项目时)
  • [数据库名称] .Services.Tests.DLL
  • [问题域] .Services.DLL(问题域的业务逻辑)
  • [问题域] .Services.Tests.DLL
  • Web.Framework.DLL(可重用的ASP.NET和MVC组件)
  • Web.Framework.Tests.DLL
  • MySite.Web.DLL(包括ViewModels的MVC应用程序)
  • MySite.Web.Tests.DLL

我们这样做是因为我们连接了多个数据库和数据服务。并且根据问题域,可以使用不同的模型集访问相同的数据库,但有时会共享相似的名称。

在服务模块中,我们将具有以下结构

  • \模型
  • \库
  • \服务
  • \等。