34

在读大学和关注 SO 的发展过程中,我听说了很多关于 Model-View-Controller 架构设计模式的信息。甚至在我知道它是什么之前,我就无意中使用了 MVC 模式,并且仍然在我的日常工作中使用它。从我所见,它可能是当今最流行的模式。不过,我没有听到太多关于您可以使用替代 MVC 的替代模式。有哪些选项,您会出于什么原因决定在 MVC 上使用它们?我也有兴趣了解它们通常用于的系统类型。最后,使用它们的优点和缺点是什么?

4

10 回答 10

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

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

于 2008-08-23T19:03:06.900 回答
5

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

分层系统

TCP/IP

面向对象的组织

Model-View-ControllerPresentation-abstraction-controlModel View PresenterModel View ViewModel

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

基于事件的隐式调用

浏览器环境 (DOM)

管道和过滤器架构

Unix管道

存储库

表驱动口译员


您可能还会发现Garlan & Shaw 的这篇关于软件架构的论文很不错。

另一个值得注意的链接是Wikipedia上关于架构模式的文章。

于 2010-07-02T08:35:54.133 回答
4

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

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

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

于 2008-08-23T19:08:12.550 回答
4

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

于 2008-08-23T19:09:49.957 回答
4

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

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

于 2008-08-23T20:14:26.060 回答
2

好吧,它现在已经很老了。我想再提一个(为了获得更多知识的信息)是PresenterFirst 模式

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

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

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

高温高压

于 2010-10-31T13:25:13.070 回答
1

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

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

于 2010-07-02T08:09:47.487 回答
1

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

于 2010-07-02T08:13:06.717 回答
0

您可以使用当前的 ASP.NET 框架推出自己的 MVC,并且仍然保留回发模型。

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

于 2009-05-21T20:47:47.843 回答
0

观察者模式呢?如果我没记错的话,MVC 是在 Smalltalk 中引入的,此后出现了几种发布/订阅模式。

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

例如:保存按钮在编辑器中启用,只有当有数据要保存时。观察者模式的另一个例子是 MFC 中的文档视图体系结构,其中视图在文档更改时得到更新。

于 2011-04-21T05:42:24.727 回答