ASP.NET MVC - Web项目中的模型

3

我是ASP.NET MVC的新手,接手了一个使用这种技术的项目。

这个Web项目包含三个文件夹:ViewsControllersModel。据我所知,Model实际上包含您的领域/业务逻辑,并由控制器调用。控制器本身充当视图和模型之间的委托者。

现在,在典型的分层架构中,任何项目都不应引用Web/UI项目。

我觉得这很令人困惑:
-> UI包含模型,这在理想情况下应该基于“领域驱动设计”原则。
-> UI之上的层(服务和数据访问)不能引用UI。

如果服务和数据访问层不知道您的模型,如何编写高效的服务和数据访问层?

我错过了什么?Web.Model与“DDD”不同吗?我是否仍然需要一个单独的BL项目?如果是这样,那么Web.Model应该包含什么内容?

3个回答

10

我认为模型是一个概念。你可以拥有一个完全独立的项目,其中包含你的领域(实体、服务等),并在你的"UI"项目中引用它。在这种情况下,这将是你的"Model"

这就是我通常做的事情,在我的Models文件夹中,我保留了"ViewModels",用于绑定/验证(用于UI)。

例如,如果我有一个员工,但我不一定想使用所有属性(或其他属性),我会创建一个EmployeeViewModel,调整我想要的方式,添加验证(如果需要),并将其传递给我的视图。

这绝不是"正确的方式"/"唯一的方式",但在过去对我起作用,所以我想分享一下(另外,我非常不擅长解释,所以我希望这篇文章有意义,如果不行或需要澄清,请告诉我)。


1
你不一定需要在同一个项目中拥有你的模型。当然,你可以将它们放在不同的层中。
这是我通常设置项目的方式:
1) UI 项目 - 这是一个 MVC Web 应用程序类型的项目,其中包含控制器及其视图和其他与 UI 相关的内容。
2) Business Entities - 这将是一个类库类型的项目,我将在其中定义我的领域对象(例如:客户)。这通常看起来很像我的数据库模式。这些通常只是表示我的领域模型的 POCO(我使用这个来生成 CodeFirst 数据库)。
3) Data Access - 这将是另一个类库类型的项目,其中包含数据访问类。通常我的存储库类/接口、我的 DBContext 类和其他数据访问类都在这个项目中。
4) Tests - 项目的单元测试。

enter image description here

已将Business Entities项目添加为Data Access Project的引用,以便我可以在我的数据访问代码中使用这些类。

在UI项目中添加了Business Entities和Data Access Projects作为引用。我会从我的控制器/服务类中调用数据访问方法。

如有需要,您还可以在控制器和数据访问层之间添加服务/业务逻辑层。

我的UI项目ViewModels文件夹中还有一些ViewModel类。我在某些屏幕上使用它来显示来自多个域对象的数据。我有一个映射/服务类,将域对象映射到视图模型对象。如果您的项目很大,可以将其作为单独的项目保存在同一解决方案中。


0
  • 视图包含您的HTML布局
  • 控制器负责从模型获取数据或模型本身,并将它们传递给视图。
  • 模型用于执行业务逻辑或获取数据的操作。

提示:您可以使用EntityFramework(我建议使用它,因为它很容易入门)来获取数据,而且设置非常简单,因此可以消除您的DAL并节省编写所有内容的时间。

服务:您可以有控制器返回XML / JSON(其他格式?),通过将从数据库获取的数据转换为XML / JSON并返回该数据,而不是视图。 请查看MVC 4 WebApi以获取更多详细信息,请注意,您也可以使用mvc 3完成几乎相同的事情

还可以参考asp.net/mvc网站上的教程,以帮助您入门,它们非常有用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接