模型 - 视图 - 控制器有哪些替代方案?

时间:2008-08-23 19:01:07

标签: model-view-controller mvp passive-view architectural-patterns

在进入大学并遵循SO的开发时,我听到了很多关于模型 - 视图 - 控制器架构设计模式的知识。我甚至在我知道它之前就无意中使用了MVC模式,并且仍然在我的日常工作中使用它。从我所看到的,它可能是今天使用的最流行的模式。然而,我没有听到太多关于可以使用的替代模式而不是MVC。有哪些选项,以及您决定在MVC上使用它们的原因是什么?我也有兴趣了解它们常用的系统类型。最后,使用它们的优点和缺点是什么?

10 个答案:

答案 0 :(得分:27)

  1. 被动视图 - http://martinfowler.com/eaaDev/PassiveScreen.html
  2. 监督控制员 - http://martinfowler.com/eaaDev/SupervisingPresenter.html
  3. 模型 - 视图 - 演示者 - http://martinfowler.com/eaaDev/ModelViewPresenter.html
  4.   

    我个人最喜欢的是被动视图。比我见过的其他人更容易测试,包括MVC。

答案 1 :(得分:5)

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

分层系统

TCP / IP

面向对象的组织

模型 - 视图 - 控制器演示文稿 - 抽象 - 控制模型视图演示者模型视图ViewModel

示例将是ASP.NET的MVC,Ruby on Rails以及其他一些。

基于事件,隐式调用

浏览器环境(DOM)

管道和过滤器架构

Unix管道

<强>存储库

表格驱动的口译员


您也可以通过Garlan&amp; amp;找到this paper。 Shaw on Software Architecture很好看。

另一个值得注意的链接是关于Wikipedia的建筑模式的文章。

答案 2 :(得分:4)

我偶尔会看到没有C的MVC,其中视图侦听模型数据中的更改并相应地改变渲染,以及模型中的方法绑定到视图的事件处理程序。

对于视图必然与数据紧密耦合的项目(例如,当存在与模型或模型属性直接相关的可视组件时),这可能相当有用,因为它切断了“中间”人“。

我认为很多人会争辩说,这仍然是MVC,只是一个混合版本,并且视图和模型之间建立的绑定是控制器逻辑。

答案 3 :(得分:4)

嗯,有Model-View-Presenter,但我认为你会发现MVC最常见的“替代品”实际上是缺乏适当的分离。作为一个极端的例子,考虑经典的ASP页面,其中HTML,VBScript和SQL在同一个文件中并排找到。 (这不是ASP的狂欢 - 你会在其他语言中找到很多这样的例子。)

答案 4 :(得分:4)

虽然上面的答案非常正确,但我认为更重要的是要注意“90%”创建软件的人完全不知道“设计模式”这个词。他们刚开始编写代码。

挑战不是选择最佳设计方法,而是让别人相信设计具有价值。

答案 5 :(得分:2)

现在已经很老了。我想再提一个(为了获取更多知识的信息) PresenterFirst patrern

以下是有关此内容的更多信息:

http://en.wikipedia.org/wiki/Presenter_First

http://www.atomicobject.com/pages/Presenter+First

HTH

答案 6 :(得分:1)

Presentation-Abstraction-Control(PAC)模式系列,其中接口/交互由代理层次结构处理。

维基百科的文章并不好 http://en.m.wikipedia.org/wiki/Presentation-abstraction-control

答案 7 :(得分:1)

Lift网络框架中,我们使用View First方法。基本上,视图由一个或多个片段(有点类似于控制器)组成,片段可以嵌套。这非常适用于HTML和Scala的内置XML处理功能。

答案 8 :(得分:0)

您可以使用当前的ASP.NET框架滚动自己的MVC,并保留回发模型。

http://www.codeproject.com/KB/aspnet/RollingYourOwnMVCwithASP.aspx

答案 9 :(得分:0)

Observer模式怎么样?如果我没有弄错的话,MVC是在Smalltalk中引入的,之后出现了几种发布/订阅模式。

观察者模式(发布/订阅模式的一个子集)是一种软件设计模式,其中一个称为主体的对象维护其依赖者列表,称为观察者,并自动通知他们任何状态变化,通常通过调用他们的方法之一。它主要用于实现分布式事件处理系统。

Ex:仅当有要保存的数据时,才会在编辑器中启用“保存”按钮。观察者模式的另一个示例是MFC中的文档视图体系结构,其中视图在文档更改时更新。

相关问题