Java OSGi服务和MVC模式最佳实践
假设我有两个osgi包。每个包中都有mvc模式。视图-swing JFrame。在这两个组件之间进行通信的最佳实践是什么?我看到有两种方法:Java OSGi服务和MVC模式最佳实践,java,swing,jakarta-ee,design-patterns,osgi,Java,Swing,Jakarta Ee,Design Patterns,Osgi,假设我有两个osgi包。每个包中都有mvc模式。视图-swing JFrame。在这两个组件之间进行通信的最佳实践是什么?我看到有两种方法: 1) 在服务中,我们执行服务函数,在这个函数中,我们调用控制器函数。诸如此类 Class MyService { public void readSomething(){ controller.readAction(); } } 2) 或者服务可能返回控制器,而其他组件将使用此外部控制器。诸如此类: Class MyServi
1) 在服务中,我们执行服务函数,在这个函数中,我们调用控制器函数。诸如此类
Class MyService {
public void readSomething(){
controller.readAction();
}
}
2) 或者服务可能返回控制器,而其他组件将使用此外部控制器。诸如此类:
Class MyService {
public Controller getController(){
return controller;
}
}
我想知道其他人在用什么和在想什么。一般来说,这取决于:-)
我假设您有两个组件A
和B
,组件A
需要通知组件B
,或者换句话说,组件B
对组件A
中发生的事情感兴趣
组件协作的一种方式是使用EventAdmin
服务;组件A为所有可能的情况发出事件,组件B为这些事件注册了一个EventHandler
。额外好处:组件A
可以指定同步/异步处理程序的执行,并且可能会有多个组件在没有任何额外开销的情况下收到通知。如果线束激活器处理所有接线,则A
和B
都不需要是服务甚至对象
另一种方法是使用声明性服务:组件A
和B
是对象,您已经定义了一个接口IB
,该接口指定了B
上的有效操作,并且B
实现了这些操作<代码>A被标记为至少需要一个IB
,DS服务将实例化这两个方法并使用正确的IB引用调用A上的方法。然后A可以正常调用IB的方法
作为DS的简化,您可以使用普通服务:a不是服务,但每次需要调用IB上的方法时,它都会找到IB的实例
最后但并非最不重要的一点是,
Blueprint服务
可以使用依赖注入实例化复杂的对象图,包括服务代理,我从未使用过,也不觉得我可以对此发表评论……这是针对Swing应用程序还是针对JEE应用程序?或者是OSGi通用的东西?@Tassos Bassoukos是OSGi通用的东西,因为我使用OSGi、javaee和javase。感谢您抽出宝贵的时间。但问题不在于通知,而在于架构模式:)啊,我错了——这取决于组件之间的耦合强度。我相信第一种情况下耦合较弱,但我使用了两种情况。在任何情况下(ha!)控制器都需要是一个接口。