与传统的3层模式相比,MVC模式的主要优点是什么?

tec*_*ert 32 model-view-controller design-patterns 3-tier n-tier-architecture n-layer

我正在考虑在我的新项目中使用MVC模式,我可以清楚地看到能够将数据层(模型)更接近表示层(视图)的主要优势,这将允许稍微增加在申请速度.但除了性能观点之外,MVC还是在视图 - 逻辑 - 数据分层类型模式上还有其他优势吗?

编辑: 对于那些感兴趣的人我刚刚上传了我创建的示例PHP代码来测试MVC的使用.我故意省略所有安全检查以使代码更容易阅读.请不要过多批评它,因为我知道它可以更加精致和先进,但不过 - 它有效!我将欢迎提出问题和建议:链接如下:http://www.sourcecodester.com/sites/default/files/download/techexpert/test_mvc.zip

Arj*_*jms 42

引用作为MVC优势的关注点的分离实际上也是3层/ 3层系统的进步.业务逻辑也是独立的,可以从不同的表示层使用.

主要区别在于,在经典MVC中,模型可以具有返回视图的引用.这意味着当数据更新时,模型可以将此数据推回到可能的多个视图.主要的例子是桌面应用程序,其中数据以多种方式可视化.这可以像表格和图表一样简单.表中的更改(这是一个视图中的更改)首先通过控制器推送到模型,然后将模型推回到图形(另一个视图).然后图表会自行更新.

由于桌面开发正在逐渐减少,许多程序员只在某些Web变体中接触过MVC,例如通过Java EE中的JSF.

在这些情况下,模型几乎从不参考视图.这是因为Web主要是基于请求/响应的,并且在请求被提供之后,服务器不能发送附加信息.即从模型推送到客户端的更新将毫无意义.对于反向ajax/comet,这种情况正在发生变化,但许多基于Web的MVC框架仍然没有充分利用它.

因此,在基于web的MVC的情况下,M,V和C之间的典型"三角形"在那里较少,并且MVC变体实际上比"真实"MVC更接近n层模型.

还要注意,一些Web MVC框架在M,V和C之间有一个中间管道部分,称为支持bean(Java/JSF)或代码隐藏(ASP.NET).在JSF中,控制器由框架提供,并且视图通常不直接绑定到模型,而是使用此支持bean作为中介.支持bean非常小,基本上只是从模型中预取数据,并将模型特定消息(例如异常)转换为视图特定消息(例如一些人类可读文本).

  • 此外,如果您希望进一步探索设计模式,那么对于其他人来说,研究MVC的衍生物MVP(模型 - 视图 - 演示者)将是有益的信息. (2认同)
  • 这不完全是那样的.在MVC中,模型中的实体(例如Customer对象)可以直接绑定到视图.从视图发送的命令(例如,单击按钮)由控制器捕获并委托给模型.这通常只是简单的方法调用,例如customer = CustomerService.getCustomer(customerID); 由于视图已绑定到此客户,因此在重新呈现(由控制器启动)时,它将自动显示新值. (2认同)

k3b*_*k3b 6

  • 代码重用,
  • 分离关注点,
  • 层间耦合较少,

@bakoyaro和@arjan已经提到了

我认为与"约定优于配置"模式结合使用时,MVC优于3层.(即"ruby on rails"或微软"MVC for asp.net").

在我看来,这种组合可以提供更好,更简单的代码维护.

首先,它使学习mvc-framework更加困难,因为你必须学习约定(la控制器进入controllers文件夹,必须命名为xxxxxcontroller)

但是在学习了这些约定之后,维护自己的代码和外部代码会更容易.

  • 你的回答听起来好像你想自己做mvc.我更喜欢你使用一个mvc-framework-libraries来实现"for convention over convention",它为我做了所有常规的东西. (2认同)