MVC
, MVVM
,之类的架构模式MVP
仅用于表示层?
我们可以在业务逻辑层或数据访问层使用吗?
我以前认为Presentation Tier
是View
;BusinessLogic Tier
是Controller/Viewmodel
和Data Access Layer
是Model
。
请有人澄清这一点..
2 回答
您提到的模式提供了耦合业务和表示层的概念。考虑具有您提到的层的经典三层架构:数据访问层、业务逻辑、表示层,然后MVVM
,提供表示层和业务逻辑耦合的概念。由于主要思想是两者之间的松散耦合,以尽可能避免两层之间的逻辑依赖关系,我会将它们视为一种中介(在这个词的含义上,而不是模式)或它们之间的粘合剂.MVC
MVP
让我为 MVVM 澄清这一点,示例:
您可以在 WPF 中编写完整的表示层,而无需使用MVVM
. 同样,您也可以在不了解MVVM
. 您根本不需要 ViewModel 来构建一个工作应用程序。
但是:您没有机会将表示/UI 的关注点与执行您的软件所编写任务的实际逻辑完全分开。两者之间的边界在现实世界中有点模糊:您计算数据,现在您想要转换数据以将其显示在图表中。这是业务逻辑吗?是和不是。这是 UI 逻辑吗?是和不是。有一个灰色地带:某种逻辑,某种 UI。这就是MVVM
(等等)发挥作用的地方:您在业务和演示之间添加一个仅专用于这个灰色区域的层。
对于 MVVM:视图就是视图,它是表示层。而 ViewModel 是灰色地带,既不是真正的 Presentation,也不是真正的业务逻辑,而是它们之间的粘合剂。模型就是模型,它是业务逻辑。它甚至可以在不知道它将用于 WPF 应用程序(理论上)的情况下编写。并且可以有业务逻辑,这甚至不是 MVVM 意义上的模型,因为它根本与 UI 无关。
在此之下,是底部带有DAL的所有其他内容。DAL真的不应该关心业务逻辑和表示是如何粘合在一起的,这超出了所讨论模式的范围。
在架构上,我会说MVC
,MVP
和MVVM
是表示层。各个组件之间的观点是:
看法
这很清楚,它属于表示层。不讨论这个
控制器/演示/视图模型
如果您取消 N 层主体,这就是业务层。似乎这种设计模式是在没有与 N-Tier 耦合的情况下发明的。
Controller
具有 Session 和 HttpContext 利用率。它依赖于网络。根据 N-Tier 主体,BLL 必须不知道任何 UI。因此它适用于表示层。Presentation
具有事件/事件处理程序/委托和一些特定于 UI 的数据。(CMIIW,我对 MVP 不太熟悉)。因此它适用于表示层。正如其他人所说,
ViewModel
很难归类为表示层。但是,我发现最好放入表示层。根据我使用 WPF 的经验,有时我需要使用特定于 MVVM 的对象,例如ObservableCollection
andINotifyPropertyChanged
和ICommand
强制数据绑定刷新。有时需要ViewModel
访问自定义会话状态,例如登录等。其他时候,您需要指定一些特定于 UI 的参数,例如字体颜色等。这可以通过处理 View 中的逻辑来避免,但是我发现在 ViewModel 中更容易做到这一点。要考虑的另一件事是,使用 MVVM 会阻止我使用服务 - 存储库模式。
模型
如果你从 MV 模式中去掉 N 层,这就是实体模型。它在 Asp.Net MVC 中进行了描述,其中模型将在视图中用作数据的容器。但是,如果您考虑 N-Tier,那么这是业务层,您可以在其中对数据进行插入/更新/删除操作,并驻留其逻辑。