最好从表示逻辑独立的业务呢?
-
23-08-2019 - |
题
我想创建一个游戏,将工作在本地和在线。
我的第一个想法是创造条件,都将由GUI业务逻辑需要方法的接口,然后有一个网络实现与本地实现。
此工作正常的请求 - 响应消息。但关于该服务器发送消息,其中,I必须更新一些GUI组件(即的JLabel)什么?
我的第一个解决方案,这是实现监听器,其中在执行每一次变化都会触发一个事件。该GUI将登记并适当地改变它的成分。然而,呼吁触发事件在业务逻辑看起来有点不对劲。
我是在正确的轨道?因为我觉得我不是。任何建议?
感谢您。
注意:客户端是一个简单的Java Swing GUI
解决方案
你所描述将成为保持模型独立的呈现问题的,这是一件好事的目标是什么。这也将帮助您设计,开发和模型的维护过程中,因为你可以写的基础上,单元测试模型中的某些变化应该火特定的事件,而不用担心这可能看起来像一个屏幕上。
和,当然,它释放您具有用于不同的环境不同的GUI设计。
关键是,这些事件应约在模型中的状态变化,和不关于在表示层拟采取的行动/交涉。让表示层处理是否/如何对模型响应事件。
其他提示
我得承认,我做网站开发,所以我没有与Swing很多经验。
不过,我一直以为我会接近它的办法是打破应用到包/浏览/模型,和/控制器。的关系将是单向:/控制器将知道两者/模型和/视图,但既不将从/控制器或彼此
导入任何类。在/视图层部件绝不会JFrames;他们会永远是JPanel的或另一个根据需要,可以组成在一起成为JFrames合适的容器中。每个就得监听器接口,构造器来初始化引用,并会推迟这些事件处理:
public class ExamplePanel extends JPanel implements ActionListener
{
private JButton button;
private ActionListener buttonListener;
public ExamplePanel(ActionListener buttonListener)
{
this.button = new JButton("Do Something");
this.buttonListener = buttonListener;
this.button.addListener(this.buttonListener);
}
public void actionPerformed(ActionEvent e)
{
this.buttonListener.actionPerformed(e);
}
}
此安排与依赖注入效果很好,因为现在控制器可以选择使用本地或远程执行该监听器接口,改变的方式,不影响客户端的所有行为。
我得承认,我从来没有跟着它一路过关斩将。
在春天人有丰富的Swing客户端模块,但它似乎已经失宠。看起来他们已经决定,BlazeDS的方向是丰富的客户提供更好的选择。但是,也许你可以从他们的做法中收集一些设计理念。