在读大学和关注 SO 的发展过程中,我听说了很多关于 Model-View-Controller 架构设计模式的信息。甚至在我知道它是什么之前,我就无意中使用了 MVC 模式,并且仍然在我的日常工作中使用它。从我所见,它可能是当今最流行的模式。不过,我没有听到太多关于您可以使用替代 MVC 的替代模式。有哪些选项,您会出于什么原因决定在 MVC 上使用它们?我也有兴趣了解它们通常用于的系统类型。最后,使用它们的优点和缺点是什么?
10 回答
- 被动视图 - http://martinfowler.com/eaaDev/PassiveScreen.html
- 监督控制器 - http://martinfowler.com/eaaDev/SupervisingPresenter.html
- 模型视图演示者 - http://martinfowler.com/eaaDev/ModelViewPresenter.html
我个人最喜欢的是被动视图。比我见过的其他人(包括 MVC)更可测试。
其他一些架构模式,包括 MVC。
分层系统
TCP/IP
面向对象的组织
Model-View-Controller、Presentation-abstraction-control、Model View Presenter和Model View ViewModel。
例如 ASP.NET 的 MVC、Ruby on Rails 和其他一些。
基于事件的隐式调用
浏览器环境 (DOM)
管道和过滤器架构
Unix管道
存储库
表驱动口译员
您可能还会发现Garlan & Shaw 的这篇关于软件架构的论文很不错。
另一个值得注意的链接是Wikipedia上关于架构模式的文章。
我偶尔会看到没有 C 的 MVC,其中视图侦听模型数据的变化并相应地更改渲染,并且模型中的方法绑定到视图的事件处理程序。
对于视图必须与数据紧密耦合的项目(例如,当存在与模型或模型属性直接相关的可视组件时),这可能非常有用,因为它消除了“中间人”。
不过,我想很多人会争辩说,这仍然是 MVC,只是一个混合版本,并且在视图和模型之间建立的绑定是控制器逻辑。
嗯,有 Model-View-Presenter,但我想你会发现 MVC 最常见的“替代方案”实际上是缺乏适当的分离。作为一个极端的例子,考虑 HTML、VBScript 和 SQL 并排在同一个文件中的经典 ASP 页面。(这不是 ASP 的 bash——你会在其他语言中找到很多这样的例子。)
尽管上面的答案非常正确,但我认为更重要的是要注意,90% 的软件开发者完全不知道“设计模式”这个词。他们只是开始编写代码。
挑战不是选择最佳设计方法,而是让其他人相信设计具有价值。
好吧,它现在已经很老了。我想再提一个(为了获得更多知识的信息)是PresenterFirst 模式
以下是有关相同内容的更多信息:
http://en.wikipedia.org/wiki/Presenter_First
http://www.atomicobject.com/pages/Presenter+First
高温高压
Presentation-Abstraction-Control (PAC) 系列模式,其中接口/交互由代理的层次结构处理。
维基百科文章不是很好 http://en.m.wikipedia.org/wiki/Presentation-abstraction-control
在Lift web 框架中,我们使用View First方法。基本上,一个视图由一个或多个片段组成(有点类似于控制器),并且片段可以嵌套。这与 HTML 和 Scala 的内置 XML 处理功能配合得非常好。
您可以使用当前的 ASP.NET 框架推出自己的 MVC,并且仍然保留回发模型。
http://www.codeproject.com/KB/aspnet/RollingYourOwnMVCwithASP.aspx
观察者模式呢?如果我没记错的话,MVC 是在 Smalltalk 中引入的,此后出现了几种发布/订阅模式。
观察者模式(发布/订阅模式的一个子集)是一种软件设计模式,其中一个称为主体的对象维护其依赖项列表,称为观察者,并自动通知它们任何状态更改,通常通过调用他们的方法。它主要用于实现分布式事件处理系统。
例如:保存按钮在编辑器中启用,只有当有数据要保存时。观察者模式的另一个例子是 MFC 中的文档视图体系结构,其中视图在文档更改时得到更新。