最近打算做一个面向服务构件模型的框架。类似于OSGI中服务构件模型的想法。构件提供服务,其它构件使用服务完成功能。框架支持服务的绑定、替换、升级等操作。
思考了几天,打算使用两个表格完成。分别是“构件表”和“服务依赖表”。
先说构件表。表项内容是<
构件名字、构件指针>。构件名字是字符串关键字,表示构件的唯一名字。而构件指针是构件名字所对应的一个构件对象指针。构件表说白了就是注册登记构件对象的表。
再看服务依赖表。表项内容是<
构件名字/所需服务名字、构件名字、有效位>。表项内容解释如下:“构件名字/所需服务”名字是字符串关键字。含义是某构件需要某服务;第二项“构件名字”表示提供此服务的构件名字;第三项“有效位”表示绑定关系是否有效。
虽然只有两个表,但已经足够表达所有构件服务依赖的内容了。
1)
构件服务绑定。容器根据构件的元描述发现构件需要什么服务,建立服务依赖表,但置有效位为假。当构件初始化时,查找构件表获得提供次服务的构件名字,将指针传给使用服务的构件。最后置有效位为真。
2)
构件替换。只需修改服务依赖表的第二项构件名字即可。比如有A和B两个构件都提供了S服务,A和B都注册在构件表中。有C构件需要S服务,之前是<C/S, A, true>,现在改为<C/S, B, true>即可。
3)
构件升级。直接修改构件表,某个名字所对应的实例指针。譬如原来A注册在构件表中是<A, ptrA1>,升级后为<A, ptrA2>,对使用A提供服务的C来说,完全是透明的
以上是框架最基本的数据结构。当然,在升级替换操作时,还要考虑诸如同步互斥、状态保存等复杂操作。这里只是提出一个原型实现。还需要在具体细节上下很多工夫。