我是ASP.NET MVC的新手,继承了一个使用该技术的项目。
这样的网络项目包含三个文件夹:Views、Controllers和Model。据我所知,模型实际上包含您的域/业务逻辑,并由您的控制器调用。控制器本身充当视图和模型之间的委托者。
现在,在典型的分层体系结构中,任何项目中都不应该引用Web/UI项目。
我觉得这很令人困惑:
-> UI包含基于“领域驱动设计”-principles的模型,这是一个理想的世界。
-> UI之上的层(服务和DataAccess)不能引用UI
如果服务和数据访问层不知道您的模型,如何编写它们呢?
我在这里错过了什么?Web.Model与"DDD“不同吗?我还应该有一个单独的BL项目吗?如果是这样的话,那么Web.Model应该包含什么?
发布于 2013-02-07 10:59:23
我认为这个模型是一个概念。您可以拥有一个完全独立的项目,其中包含您的域(实体、服务等)。并参考您的"UI“项目。在这个场景中,这将是您的“模型”。这就是我通常所做的,在我的模型文件夹中,我保留了"ViewModels",用于绑定/验证(用于UI)。例如,如果我有一个雇员,但我不需要使用它的所有属性(或者就不同的属性而言),我将创建一个EmployeeViewModel,以我想要的方式调整它,我将添加验证(如果需要的话),并将它传递给我的视图。
这绝不是“正确的方式”/“唯一的方式”,但它在过去对我有效,我想我会分享(而且,我在解释方面相当糟糕,所以我真的希望这篇文章是有意义的,以防它不需要或澄清--请告诉我)。
发布于 2013-02-07 10:58:22
您不一定需要在同一个项目中使用您的模型。当然,你可以把这些放在不同的层次上。
这就是我通常设置项目的方式。
1) UI项目--这是一个MVC应用程序类型的项目,在这里我将拥有我的控制器、它的视图和其他与UI相关的东西
2)业务实体--这将是一个类库类型的项目,我将在其中定义域对象( Ex : Customer)。这在很大程度上与我的DB模式类似。这些通常只是POCO的,它代表了我的域模式(我使用它来生成CodeFirst数据库)。
3)数据访问--这将是另一个具有数据访问类的类库类型项目。通常,我的存储库类/接口、我的DBContext类和其他数据访问类将在这个项目中。
4)测试--项目的单元测试

已将业务实体项目添加为对数据访问项目的引用,以便我可以在数据访问代码中使用这些类。
在UI项目中添加业务实体和数据访问项目作为引用。我会从控制器/服务类调用数据访问方法。
您还可以根据需要在控制器和数据访问层之间添加一个服务/业务逻辑层。
我的UI项目ViewModels文件夹中也有几个ViewModels类。我在一些屏幕上使用这个,在这些屏幕上,我必须显示来自多个域对象的数据。我有一个映射/服务类,它将域对象映射为查看模型对象。如果您的项目是bifg,则可以将其作为一个serperate项目保存在相同的解决方案下。
发布于 2013-02-07 10:48:32
提示:您可以使用EntityFramework (我建议使用它,因为它很容易开始)来获取您的数据,而且设置非常简单,从而消除了DAL,节省了您自己编写所有东西的时间。
服务:您可以拥有返回XML/JSON (其他格式?)的控制器。通过将从DB获得的数据转换为XML/JSON,并返回该数据而不是视图。关于MVC 4 WebApi的更多细节,请注意,您也可以使用mvc 3进行类似的操作。
此外,请参考asp.net/mvc站点的教程,让您开始,它们是非常有用的。
https://stackoverflow.com/questions/14748168
复制相似问题