Model view controller 您是否尝试过将MVC用于GWT客户端代码?

Model view controller 您是否尝试过将MVC用于GWT客户端代码?,model-view-controller,gwt,Model View Controller,Gwt,您是否尝试过对GWT客户端代码使用MVC或任何其他UI模式。您在不同的方法中遇到了哪些陷阱/优势 本文讨论了GWT的MVC模式,其中也有与此深入讨论的链接 我要补充的唯一一点是,客户端代码的整体可以被视为“MVC”中的“V”,这可能会改变您看待它的方式。将客户端代码看作它自己的嵌套MVC组件,它是Java的,它是面向对象的,所以它可以设计得很像Swing应用程序。我认为从视图中提取尽可能多的控制器代码来处理GWT RPC内容对您是有利的。该模型有时问题更大,因为您可能需要决定是否将其放在服务器上

您是否尝试过对GWT客户端代码使用MVC或任何其他UI模式。您在不同的方法中遇到了哪些陷阱/优势

本文讨论了GWT的MVC模式,其中也有与此深入讨论的链接


我要补充的唯一一点是,客户端代码的整体可以被视为“MVC”中的“V”,这可能会改变您看待它的方式。将客户端代码看作它自己的嵌套MVC组件,它是Java的,它是面向对象的,所以它可以设计得很像Swing应用程序。我认为从视图中提取尽可能多的控制器代码来处理GWT RPC内容对您是有利的。该模型有时问题更大,因为您可能需要决定是否将其放在服务器上而不是客户机上。或者创建一个模型代理,等等。

我认为您需要像对待任何其他UI框架一样对待GWT,如Swing、Cocoa等。在这些框架中,MVC(或其他范例)方面有意义的一切在GWT中也有意义。我认为有时候人们对MVC的理解太过分了,我更喜欢它在Cocoa中的工作方式,而不是大多数框架。创建一个视图,有一个控制视图所有行为的ViewController,然后有一个包含所有数据的模型对象。我不认为你需要对你所有的业务逻辑都在哪里一成不变,它只需要在有意义的地方

就陷阱而言,您将遇到的主要陷阱是GWT纯粹是一种前端技术,因此从技术上讲,后端位于某个服务器上。我不认为这与编写客户机-服务器swing应用程序有什么不同,它将数据存储在云中的某个地方。不同之处在于GWT被编译成javascript,并且具有javascript web应用程序的所有限制,因此有些事情在前端是无法完成的。例如,假设您想要创建一个PDF,并向用户显示,您不能在GWT中这样做,您需要调用后端来为您完成。另一方面,在Swing应用程序中,您可能可以使用itext并在客户端执行它。

您尝试过GWTruts()吗? 它也是一个开源的GWT MVC框架,GWT中独立的视图和控制器可以帮助您

优点是:

  • 易读控制器
  • 历史令牌管理
  • 控制器可使用JMock进行测试(但不能使用GwtTestCase)
  • 分层MVC
  • 简单继承,开始对视图、控制器和模型进行编码

当GWT应用程序超越了最小的项目时,使用某种MVC/MVP类型的模式非常重要,否则你就失去了对正在发生的事情的控制

除了已经提到的,还有GXT的MVC实现,我在这里看到了:

去年在谷歌IO上的这个演讲让很多人开始思考GWT上的MVC/MVP:


我最近注意到,GWT文档中现在还有一个关于MVP体系结构的教程,这是一个很好的开始:

您可以看看JetPad Mappers,它是JetBrains开发的一个最低限度的MVC框架,用于一些(目前尚未发布的)产品中

免责声明,我参与了这个框架的开发