Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java OSGi服务和MVC模式最佳实践_Java_Swing_Jakarta Ee_Design Patterns_Osgi - Fatal编程技术网

Java OSGi服务和MVC模式最佳实践

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

假设我有两个osgi包。每个包中都有mvc模式。视图-swing JFrame。在这两个组件之间进行通信的最佳实践是什么?我看到有两种方法:

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!)
控制器都需要是一个接口。