分层ASP.NET MVC Web应用程序

时间:2012-06-05 21:27:21

标签: asp.net-mvc n-tier-architecture separation-of-concerns

当我开发WinForms或WebForms应用程序时,我创建了一个解决方案并添加了多个项目。 BOL项目是业务对象的类库,有一个用于ADO.NET相关内容的SQL和DAL项目,我有一个Utilities项目,其中包含诸如验证和诸如此类的东西的类。现在,我通常称之为GUI的表示层包含表单。表单直接与BOL一起工作,BOL连接到连接到DAL的SQL等......

我相信你们都已经知道了这一点,所以我感到很困惑。在使用MVC时,我看到的项目都包含这种类型的功能,但它们都在一个项目中,只是分成文件夹。我查看了Nerd Dinner应用程序,甚至这一切都在一个项目中。最终结果是一个DLL来处理它。这是个好主意,还是你们把这些作品分成不同的项目?通常一个DLL必须经过另一个DLL才能到达数据访问DLL类型的东西。也许我只是对整个概念感到困惑。

1 个答案:

答案 0 :(得分:2)

您始终可以将此逻辑层分隔为单独的物理层(项目)。您可以为您的实体创建一个单独的项目,一个用于您的数据访问代码等。

这是我为我的一个receny项目做的结构

1)UI :具有UI相关内容的标准MVC项目。控制器和视图以及相关的CSS东西&脚本。

2)实体:类库Project。我的商业实体在这里。这些只是代表我的域模式的POCO(我将它用于CodeFirst数据库生成)。

3)数据访问:类库Project。我这里有我的数据访问代码。 Repositary,Interfaces和我的DBContext类。

4)测试:我的单元测试在这个项目中。

UI项目引用了我的实体和我的数据访问项目。

数据访问项目引用了我的实体,因为我的Repositary方法返回了对象。

我的UI项目ViewModels文件夹中也有很少的ViewModel类。我在一些屏幕上使用它,我必须显示来自多个域对象的数据。我有一个映射/服务类,它将域对象映射到视图模型对象。如果您的项目是bifg,您可以将其保留为同一解决方案下的serperate项目。

解决方案看起来像这样。 (这是我正在开发的一个开源项目)

enter image description here