有哪些替代Model-View-Controller的选择?

34

在大学期间和关注SO的发展过程中,我听说了很多关于模型-视图-控制器(MVC)架构设计模式的内容。即使在不知道它是什么之前,我也无意中使用了MVC模式,并在我的日常工作中继续使用它。从我所看到的情况来看,它可能是当今最流行的模式。但是,我很少听说与MVC替代模式相关的内容。有哪些选项?出于什么原因会选择它们而非MVC?我也想知道它们通常用于哪种类型的系统。最后,使用它们的优缺点是什么?

10个回答

27

1
还有一种在.NET领域越来越受欢迎的模式,即Model-View-ViewModel(-Controller)。您可以创建一个ViewModel(通常在控制器中)并将其传递给视图,以减少视图对模型实现细节的依赖。这是我目前最喜欢的模式。 - Iain Galloway
1
被动视图不是(几乎)所有Web框架都实现了吗?我想不出任何内置AJAX轮询模型以“通知”视图的框架。被动视图和三层架构有什么区别? - Lotus Notes

5

一些其他的架构模式,包括MVC。

分层系统

TCP/IP

面向对象组织

模型-视图-控制器演示-抽象-控制模型视图显示器模型视图视图模型

例如ASP.NET的MVC,Ruby on Rails和其他一些框架。

基于事件,隐式调用

浏览器环境(DOM)

管道和过滤器架构

Unix管道

存储库

表驱动解释器


如果您对软件架构感兴趣,您可以阅读 Garlan & Shaw 关于软件架构的 论文

另一个值得一提的链接是维基百科上关于架构模式的文章文章


4
我曾经看到过一些没有控制器(C)的MVC模式,其中视图监听模型数据的变化并相应地改变渲染方式,而模型中的方法则绑定到视图的事件处理程序上。
对于那些需要紧密耦合数据和视图的项目(例如当有与模型或模型属性直接相关的可视化组件时),这种方法非常有用,因为它省去了“中间人”。
不过,我认为许多人会争辩说这仍然是MVC,只是混合版本,并且在视图和模型之间建立的绑定是控制器逻辑。

4

嗯,有Model-View-Presenter的模式,但我认为你会发现最常见的“替代”MVC的方式实际上是缺乏适当的分离。作为一个极端的例子,考虑经典ASP页面,在同一文件中同时包含HTML、VBScript和SQL。(这不是对ASP的攻击——在其他语言中也会找到许多这样的例子。)


4
尽管上述答案都是正确的,但我认为更重要的是要注意,“设计模式”这个词对于所有创建软件的人中有90%的人来说是完全陌生的。他们只是开始编写代码。
挑战不在于选择最佳的设计方法,而在于说服其他人设计具有价值。

2

1

1
Lift Web框架中,我们采用视图优先的方法。基本上,一个视图由一个或多个片段组成(有点类似于控制器),而片段可以嵌套。这种方法非常适合HTML和Scala内置的XML处理能力。

0
关于观察者模式怎么样? 如果我没记错,MVC是在Smalltalk中引入的,此后又出现了几种发布/订阅模式。
观察者模式(发布/订阅模式的子集)是一种软件设计模式,其中一个称为主题的对象维护其依赖项列表(称为观察者),并通过调用它们的方法之一自动通知它们任何状态更改。它主要用于实现分布式事件处理系统。
例如:编辑器中只有数据需要保存时才启用保存按钮。观察者模式的另一个示例是MFC中的文档视图体系结构,在其中当文档更改时更新视图。

你告诉我们!这种模式有什么好处? - John Saunders

0

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