【发布时间】:2011-06-01 17:29:41
【问题描述】:
首先,在有人大喊大叫之前,我很难用一个简单的标题来概括它。另一个标题可能是“领域模型和 MVC 模型有什么区别?”或“什么是模型?”
从概念上讲,我理解模型是视图和控制器使用的数据。除此之外,对于模型的构成似乎有很多不同的意见。什么是领域模型、应用模型、视图模型、服务模型等等。
例如,在我最近问及存储库模式的一个问题中,有人直接告诉我存储库是模型的一部分。但是,我阅读了其他意见,认为模型应该与持久性模型和业务逻辑层分开。毕竟,存储库模式不应该将具体的持久性方法与模型分离吗?其他人说域模型和MVC模型之间存在差异。
让我们举一个简单的例子。 MVC 默认项目中包含的 AccountController。我已经阅读了一些意见,其中包含的帐户代码设计不佳,违反了 SRP 等等。如果要为 MVC 应用程序设计一个“适当的”会员模型,那会是什么?
您将如何将 ASP.NET 服务(成员资格提供程序、角色提供程序等)与模型分开?或者你会吗?
在我看来,模型应该是“纯粹的”,可能带有验证逻辑......但应该与业务规则分开(验证除外)。例如,假设您有一条业务规则,规定在创建新帐户时必须向某人发送电子邮件。在我看来,这并不真正属于模型。那么它属于哪里呢?
有人愿意解释这个问题吗?
【问题讨论】:
-
这就是为什么你应该问四个不同的问题。
-
关键字是“几乎”。这实际上是同一个问题,可能使用子问题来说明主要问题。
-
模型 - 视图 - 控制器。是存储库/BL 视图吗?不,是控制器吗?不。还剩下什么:)?它是 MVC,不是 MSVC,不是 MRVC,不是 MBLVC。只有三层。所以存储库是模型的一部分,BL 是模型的一部分。您可以进行额外的分离,但它是在模型层内部完成的。
-
@LukeLed, @bslm - 不是真的。 MVC 并没有说控制器或模型不能与其他层交互。
-
@LukLed - 不同意 - MVC 只是一种表示层模式。它不会影响您如何构建 BLL 和 DAL 等其他层。
标签: asp.net-mvc model-view-controller design-patterns business-logic-layer