我在java中创建一个3层应用程序,它由gui,业务逻辑层和数据库层组成。所有图层都是客户端的。
从多层架构的定义来看,只允许调用相同或更低层,并返回相同或更高层。
在我的情况下,我在用户点击按钮后进行了大量的数据库查询。我想在我的gui中有一个状态字段,显示当前查询的表格。
因为所有图层都在同一个应用程序中,所以我可以从数据库层调用一个方法,同时循环遍历表以更新状态字段。但这样做会破坏规则,只能调用较低或相同的层。
那么在3层体系结构中从较低层更新或通知gui的“合法”方式是什么?
答案 0 :(得分:2)
我建议使用观察者模式。通过使用java.util.Observable
类(作为主题)和java.util.Observer
接口,您仍将保留约定。
因此GUI调用如下方法:
BusinessImpl#doDAOStuff(java.util.Observer observer){
...
dao.performStatements(observer);
....
}
DAO impl看起来应该是这样的:
DAOImpl#performStatements(java.util.Observer observer){
String stmt;
...
// do insert ...
observer.update(this, stmt);
...
// do update ...
observer.update(this, stmt);
...
}
这只是伪源,但我认为它涵盖了主要概念。
答案 1 :(得分:0)
理想情况下,您应该使用中间层按照MVC的建议从db层到ui层进行通信。但是如果你真的需要按照自己的意愿去做,那么在每一层实现Observer模式会怎样。使DB层可观察,将UI层添加为和观察者。每当您想要更新UI时,请调用相关的观察者并发送可由UI使用和显示的信息。