应用程序设计 - 更新域对象

时间:2011-10-21 12:57:17

标签: java swing architecture network-programming

我想改进我的应用程序的某些部分的设计。它是一种swing应用程序,其中用户界面由从服务器(TCP / UDP)接收的数据更新。目前我将我的域对象(PO​​JO)传递给类的构造函数,它将与服务器连接,接收和发送数据,并直接使用getter和setter方法。

public static void main(String[] args) {
TcpClient client = new TcpClient(server, port, domainModel);
}

public class TcpClient {
public void connect() {
// Code to create the socket and connect to the server.

new Thread(new TcpProtocol(socket, domainModel)).start();
}
}

我在TcpProtocol类中使用某种Factory类来创建正确的对象。 我想将我的域对象与网络编程部分分离。是否有一些常用的模式可供使用?我在考虑DAO和Value Object,它们通常用于JavaEE应用程序。这是我见过的唯一一个,但如果有人有更好的主张,请告诉我。 谢谢。

4 个答案:

答案 0 :(得分:0)

开始实现目标的是从构造函数中删除网络访问代码(假设您有一个联系网络的类,并且您将POJO传递给其构造函数)。您将创建一个与网络联系的实用程序。

要从数据流中实例化正确的对象类型,您可以考虑创建一个知道如何使流适应特定对象类型的Factory

答案 1 :(得分:0)

作为一般规则,我认为构造函数中的非平凡代码是设计气味,因为它使继承和其他形式的可扩展性变得复杂。

如果您在创建对象后不需要该对象从网络更新,则可以使用Factory创建POJO。我倾向于避免使用ValueObjects,除非你用很少的数据包装一些东西,比如货币/日期,否则你最终会得到一堆getter / setter。

如果您在使用对象时需要对象访问网络,则可以将其设为Proxy并传入处理所有网络代码的DAO。对于测试,您需要传递Mock/Stub

答案 2 :(得分:0)

也许使用java.io ObjectInputStream和ObjectOutputStream可能是一种简单的方法,因为它不依赖于传输对象的类?

答案 3 :(得分:0)

我建议做的是应用Observer模式。您可能还需要将Mediator模式与您的观察者一起应用 - 但请仔细检查您的设计 保证这种复杂性。

观察者背后的想法是你的UI代码“监听”所呈现模型的变化。当发生更改时(可能来自您的网络绑定代码),会触发一个事件,从而通知您的UI,以便相应地更新自己,