25
|
Matt Raible · 技术社区 · 15 年前 |
1
17
值得注意的是,Google最终编写了一个使用MVP架构进行设计的教程。它澄清了上面列出的谷歌I/O对话中的许多元素。看一看: https://developers.google.com/web-toolkit/articles/mvp-architecture |
2
11
我很高兴有人问这个问题,因为GWT绝望地需要一种类似Rails的方法来构造应用程序。一种基于最佳实践的简单方法,适用于90%的所有用例,并且实现了超简单的可测试性。 在过去的几年里,我一直在使用我自己的MVP实现,用一种非常被动的观点,将自己奴役于演讲者告诉他的任何事情。 我的解决方案包括:
视图将引用演示者作为其构造函数参数,因此可以使用演示者初始化事件。演示者将处理这些事件,并通知其他小部件/视图,或者调用GWT RPC,成功后将其结果放入模型中。该模型有一个典型的“属性[列表[字符串]]名称=…”属性更改侦听器机制,该机制在演示者中注册,以便GWT RPC请求对模型的更新转到所有感兴趣的视图/小部件。 有了这个应用程序,我可以很容易地用easymock对我的非对称接口进行测试。我还能够轻松地交换视图/小部件的实现,因为我需要重写的只是通知演示者某些事件的代码——不管底层小部件(按钮、链接等)是什么。 我的方法有问题:
我对这些问题的解决方案:
总结: 我认为一个人不能对整个应用程序使用单一的“MVP”方法。一个明确需要应用程序导航的历史记录,一个像gxt-mvc这样的事件总线来连接/分离屏幕,以及MVP来实现对小部件数据访问的简单测试。 因此,我提出了一种将这三个元素结合在一起的分层方法,因为我相信“单事件MVP系统”——解决方案是行不通的。导航/屏幕附加/数据访问是三个独立的问题,我将在接下来的几个月内重构我的应用程序(转到Gxt),以便分别为每个问题使用所有三个事件框架(工作的最佳工具)。这三个要素不需要相互了解。我知道我的解决方案只适用于Gxt项目。 在编写大型GWT应用程序时,我觉得我必须在客户端上重新设计一些像SpringMVC这样的东西,这真的很糟糕,因为要将一些优雅的东西吐出SpringMVC需要很多时间和脑力。GWT需要一个应用程序框架,而不仅仅是那些小的JS优化,而编译器们正在努力工作。 |
3
7
|
4
3
如果您对使用MVP体系结构感兴趣,您可能需要了解一下GWTP: http://code.google.com/p/gwt-platform/ . 这是我正在开发的一个开源MVP框架,它支持GWT的许多不错的特性,包括代码拆分和历史管理,以及一个简单的基于注释的API。它是最近的,但已经在许多项目中使用。 |
5
1
你应该看看 GWT Portlets . 我们在处理大型HR门户应用程序时开发了GWTPortlets框架,现在它是免费的、开源的。从GWTPortlets网站(托管在Google代码上): 编程模型与为门户服务器(Liferay、JBoss Portal等)编写JSR168 portlet有些相似。“门户”是使用GWTPortlets框架作为库构建的应用程序。应用程序功能是作为松散耦合的portlet开发的,每个portlet都有一个可选的服务器端数据提供程序。 每个portlet都知道如何将其状态外部化为可序列化的portlet factory子类(momento/dto/factory模式),从而实现重要的功能:
框架的其他重要特征如下:
GWT Portlet是用Java代码实现的,不封装任何外部JavaScript库。它不强制使用任何服务器端框架(如Spring或J2EE),但设计用于与此类框架结合使用。 |
Medet · 即使没有屏幕旋转,也保持ViewModel活动 7 年前 |
saradindu samal · 实现MVP设计模式的正确标准是什么 7 年前 |
Sermilion · 安卓:MVP。组件间通信的正确方式 8 年前 |
tur · CachingActivityMapper有什么意义? 9 年前 |
Jacob Phan · MVC模式。模型、视图和控制器之间的关系 9 年前 |
Lahey · MVP:被动视图(带EF)和图层 11 年前 |
Milambardo · MVP演示者在回发后订阅了活动 12 年前 |