我已经开始使用gwt进行一些基本的Java编码,而我有点担心主类的繁重。
例如- 如何分隔密钥处理程序,因为它们触发了UI的许多更改,我如何才能将其移到单独的.class文件中,并且仍然能够访问主类中的所有各种小部件,而不必将所有内容传递给处理程序(即,我在click事件之后处理的所有小部件)。
我已经在Google上搜索过,但是没有遇到任何特别好的例子- 知道我可以阅读的任何易读的代码库,看看应该如何做?(gwt自己的tut非常简单,只需将所有内容整理到一个文件中)
谢谢!
我讨厌说些没什么想像力的东西,但是MVC可以工作-它不是最终的工具,但是它可以使您有条理。
编辑:在搜索一个半相关的主题时,我碰到了一个类似的想法,但会更详细。
就GWT而言,这意味着您应该考虑将GUI组件放在一个类中,将所有事件处理放在第二个类中,并将对象模型对象与其他两个对象分开。
实现此目的的一种方法是将GUI上的大多数或所有控件公开。这听起来有些la脚,但是它们的用法封装在控制器内部,所以这并不是您具有不可控制的访问权限- 实际上,与所有成员都是私有的相比,访问权限的定义更清晰/定义更好,但是您的视图代码与控制器结合在一起。
具体技巧:
让听众成为他们自己的班级。您经常可以重用它们- 换句话说,避免使用匿名内部类。我有时会创建一个侦听器类,并为每个按钮/控件实例化一个新实例,这些按钮/控件在按下时需要具有相似的效果。如果我需要它对给定的按钮采取一些稍有不同的操作,则将某些内容传递给“特殊”处理程序的构造函数,以便他们知道某些不同的操作。如果需要,您还可以创建不同的处理程序子类- 我只是说不要忘记事件处理程序是类,可以使用继承,并且在需要时可以使用所有内容。
我很久以前学过的一个非常古老的GUI技巧,不要让各种微型处理程序以不同的方式修改GUI,而是让所有“活动”按钮和控件在GUI中设置状态,然后调用一个方法来将该状态应用于GUI上的所有控件。当您超越普通的GUI时,这可能会节省生命。如果不清楚,请发表评论,并为您提供示例。
属性表:
GUI有一个特例- 属性表样式GUI。我已经做了很多这些,它们使人为地狱而烦恼。它们往往具有数十或数百个控件,每个GUI控件往往都绑定到模型中的特定字段,并且只有几百行复制和粘贴样板代码连接它们,每组都复制并粘贴了几行项目已更改- 每个控件至少需要3行代码(创建控件,复制值输入和复制值输出)。
我总是使用“智能”控制器编写这些代码,该控制器可以智能地将控件绑定到某些数据,而无需任何唯一代码。这可能会很棘手,如果这是您的问题,请在评论中让我知道,我可以为您提供一些可能会尝试的技巧的一般建议。我已经从最小的反射解决方案变成了基于XML的完整解决方案。如果我要再做一次,我可能会考虑基于注释。
MVC的示例:
注意,这只是一个示例,有数百万种方法可以执行MVC。
在您的MAIN中:
在我看来
在MyController中
在MyModel中:
这将是一个典型的模型类,它将包含您的业务逻辑(通常不用作GUI的一部分,这更像是MyController中的GUI逻辑。控制器倾向于在您的业务逻辑中设置值,然后调用诸如update( ),以使某些业务逻辑获得控制。它不应该知道GUI,这是您的“纯”业务类。
有时,GUI可能会调用update()或其他方法来触发一些数据更改,然后从模型中重新加载GUI控件- 这是一种在您的模型不了解GUI的情况下将业务逻辑与GUI集成的相当不错的方法…
而且,正如我上面所说的,如果我使用属性表,我会在MyController中投入更多的工作,这是因为如果您不聪明,那么最终会得到大量的样板行。
请注意,View和Controller几乎总是配对。您不能只用Web视图替换Swing视图并期望控制器保持不受干扰- 但是对于视图或控制器,模型永远都不应更改。