当您启动新的Web应用程序时,您在 MVC 和 MVP 之间选择哪种模式以及为什么?
答案 0 :(得分:11)
(此答案特定于Web应用程序。对于常规GUI,请参阅What are MVP and MVC and what is the difference?。)
用于GUI应用程序的传统MVC
这与Web应用程序并不真正相关,但这里是MVC传统上在GUI应用程序中的工作方式:
使用这种方法,您可以拥有(1)多种方式来更新给定的数据,以及(2)多种方式来查看相同的数据。但是你不必让每个控制器知道每个视图,反之亦然 - 每个人都可以和模型交谈。
服务器上的MVC
Rails,Django和其他服务器端框架都倾向于使用特定版本的MVC。
这似乎对基于服务器的Web应用程序非常有效,我对此非常满意。
客户端上的MVP
但是,如果您的大部分代码都是用JavaScript编写并在Web浏览器中运行,那么现在很多人都会使用MVP。在这种情况下,角色有点不同:
此模型很受欢迎,因为您可以轻松删除视图层并针对演示者和模型编写单元测试。它也更适合于一切都在不断更新的交互式应用程序,而不是处理离散请求和响应的服务器应用程序。
这是一些背景阅读:
Google的MVP +活动总线
这是一种新方法,在此video from the Google AdWords team中有所描述。它旨在与缓存,离线HTML 5应用程序以及GWT等复杂的客户端工具包配合使用。它基于以下观察:
采用这种方法:
因此,这种体系结构本质上是异步的,它易于测试,如果您想编写HTML 5离线应用程序,则不需要进行重大更改。我还没有使用它,但它是我要尝试的事项列表中的下一个。 : - )
答案 1 :(得分:1)
MVP和MVC都有意义,允许将逻辑与显示分开。
我会选择MVC,因为它最近在Web开发中被广泛使用(Rails,.NET MVC用于SO)所以我的应用程序将更容易被其他人维护。它也是 - 我更清洁(给视图的“权力”),但这是主观的。
答案 2 :(得分:1)
另一种选择是Django使用的MTV,Model-Template-View。