项目使用OSGI框架开发,每个bundle都是可动态增删的模块,bundle之间的依赖关系处理是在OSGI上注册、监听服务实现的,具体可参考OSGI的相关书籍。每个bundle就是独立的、可在软件运行后删除、替换(即热插拔,如eclipse的各种插件,就是OSGI实现的),在bundle内部的包依赖管理需要自己处理。比如这样:
用户通过UI界面发来的请求,经UI接口、Service后,最后在Hundle处调集资源处理,得到结果,沿原路返回。目前需在不影响原流程的情况下,实现一个新的附加功能:用户参数会附加一个标记,有此标记则保存用户参数,后台定时利用这些参数重复计算,得到新的结果,实现持续监控的功能。
在具体实现时,因为不只是保留用户参数,还有Hundle内部运算的一些中间变量也需要保存,最后将新功能的model(用户参数、定时频率、到期时间等)抽象后,放在Service包中,而唯一的实现类放在Hundle中。抽象类中仅保存用户参数,具体的实现类扩展了中间变量的存储,但对外也隐藏了其细节。
现在仔细总结后发现,之所以处理起来感觉麻烦,是因为在包功能划分时还不够细致。完全可以将用户参数单独提出来,作为一个类(比如Data),放在Model中,在Hundle内部定义一个包含Data类的业务类,此业务类中还存储中间变量,在计算完成后返回给上层service时,直接给出Data,效果一样,职责更清晰。