在大学学习和跟随SO的发展过程中,我听到了很多有关Model-View-Controller架构设计模式的信息。 我什至在不了解MVC模式之前就无意中使用了MVC模式,并且仍然在我的日常工作中使用它。 从我所看到的,它可能是当今使用最流行的模式。 尽管我还不太了解,但是可以使用替代模式来代替MVC。 有哪些选项,您出于什么原因决定通过MVC使用它们? 我还想知道它们通常用于的系统类型。 最后,使用它们带来的利弊是什么?

===============>>#1 票数:27 已采纳

  1. 被动检视-http://martinfowler.com/eaaDev/PassiveScreen.html
  2. 监督控制器-http: //martinfowler.com/eaaDev/SupervisingPresenter.html
  3. Model-View-Presenter- http://martinfowler.com/eaaDev/ModelViewPresenter.html

我个人最喜欢的是被动视图 比包括MVC在内的其他产品更具可测试性。

===============>>#2 票数:5

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

分层系统

TCP / IP

面向对象的组织

Model-View-ControllerPresentation-abstraction-ControlModel View PresenterModel View ViewModel

例如ASP.NET的MVC,Ruby on Rails等。

基于事件的隐式调用

浏览器环境(DOM)

管道和过滤器架构

Unix管道

储存库

表驱动口译员


你也可能发现本文由:依循Garlan肖软件体系结构的一个很好的阅读。

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

===============>>#3 票数:4

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

对于需要将视图与数据紧密结合的项目(例如,当存在与模型或模型属性直接相关的可视组件时),这很有用,因为它可以剔除“中间人”。

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

===============>>#4 票数:4

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

===============>>#5 票数:4

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

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

===============>>#6 票数:2

好吧,现在已经很老了。 我想再说一遍(为了获取更多信息,以获取信息)是PresenterFirst patrern

这是有关同一内容的更多信息:

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

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

高温超导

===============>>#7 票数:1

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

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

===============>>#8 票数:1

Lift网络框架中,我们使用“ 查看优先”方法。 基本上,一个视图由一个或多个代码段(有点类似于控制器)组成,并且代码段可以嵌套。 这与HTML和Scala的内置XML处理功能配合得很好。

===============>>#9 票数:0

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

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

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

===============>>#10 票数:0

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

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

  ask by Aaron translate from so

未解决问题?本站智能推荐:

1回复

如何在MVP方案中的演示者和视图之间进行通信?

基本上我知道有两种选择。 第一个是视图公开演示者应该订阅的通知事件。 当用户单击视图上的某个按钮时,视图只会触发某个事件,通知某些内容已更改。 第二种是使用观察者模式,让演示者干涉一些合同。 让它成为我上面告诉你的事件之类的方法的接口。 应将演示者观察者附加到视图中。 正
3回复

JavaScript中的被动视图

我正在考虑在JavaScript中实现MVP - 被动视图模式。 在大多数情况下,视图将是简单的dom元素,其中演示者附加事件侦听器。 但是,当涉及到基于JavaScript的伪选择框,自动建议或aria功能等小部件时,它应该是JavaScript视图类的一部分还是更改视图的逻辑应该是演示者
2回复

集合的MVP被动视图和监督控制器之间的实现差异

我已经开始围绕整个MVP模式,尽管我对单个对象做得很好,但在集合方面却开始变得困难。 所以我们假设我们正在构建一个简单的WinForms应用程序,它由一个Form中的DataGrid组成,数据Model是一个简单的东西集合,其中这些东西有很多属性,而View实际上会显示它们: 模型
2回复

模型视图呈现器和大型对象的传输

传统上,我已经实现了Model-View-Presenter [Passive View],如下所示: 传统上我只在IView接口中使用基本类型( int , string和bool ),因为我一直都知道您只需要在View中使用基本类型。 在存储库(例如NHibernate )中,如果
2回复

如何构造C#WinForms模型视图呈现器(被动视图)程序?

我正在设计一个具有以下基本思想的GUI(类似地以Visual Studio的基本外观为模型): 文件导航 控制选择器(用于选择在编辑器组件中显示的内容) 编辑 记录器(错误,警告,确认等) 现在,我将使用TreeView进行文件导航,使用ListView
3回复

模型视图演示者和复合视图

我试图在java swing ui应用程序中遵循MVP(特别是Passive-View)模式。 应用程序的基本设计提醒向导控件。 屏幕分为两个主要部分: 积极的观点。 一个静态导航栏,带有导航按钮。 用户可以使用按钮更改活动视图,但始终显示该栏。 在这个场
3回复

MVP被动视图 - 将视图数据和模型数据分开

我使用被动视图模式实现了MVP三元组 - 即视图仅包含简单的getter和setter。 但是,我无法分离视图数据和模型数据。 特别是在处理视图状态的变化时。 三元组用于使用户能够从列表中选择一个部件。 零件清单由模型提供,每个零件由唯一ID唯一标识。 让我们说部件看起来像这样
2回复

C#WinForms模型 - 视图 - 演示者(被动视图)

我正在用C#开发一个WinForms应用程序。 我在GUI编程方面经验有限,而且我必须在飞行中学到很多东西。 话虽这么说,这就是我正在建设的。 请参阅常规GUI查看以下链接: GUI http://img227.imageshack.us/img227/1084/program0
2回复

如何在C#Winforms中使用被动方式正确实现模型视图呈现器?

我现在正在研究设计模式,虽然对asp.net mvc已有一定的经验,但我对这个模型视图演示者还是相当陌生,我正在尝试在winforms中实现mvp。 文本框中的字符串将使用基于组合框的算法进行排序。 现在,当我单击按钮时,它将引发空引用异常 这是用户界面: 这是我的课程和代码
1回复

使用MVP,如何从另一个视图创建一个与同一模型对象链接的视图

背景 我们在应用程序中使用Model-View-Presenter设计模式以及抽象工厂模式和“ signal / slot”模式来满足2个主要要求 增强可测试性(非常轻巧的GUI,可以在单元测试中模拟每个操作) 使“视图”与其余视图完全独立,因此我们可以更改实际的视图实现