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