您建议使用哪些教程来学习使用OSGi的模块化Java,以及如何通过将解耦系统分解为模块来编写解耦系统的建议?什么级别的粒度是正确的;包含所有内容的大包,很多非常少的包含一个特定任务,或介于两者之间?
答案 0 :(得分:1)
什么级别的粒度是正确的
我希望这听起来不会过于陈词滥调,但我想不出任何其他方式来回答 - 这取决于。在我的脑海中,这里有一些影响答案的因素:项目有多大?有多少开发人员?它会使用多长时间?它是一个单次一次性的一次性应用程序(例如,用于演示),还是需要在几年内继续发展的东西?是否要支持同一基本应用程序的多个配置?释放后,您是否有机会进行重大重构,或者这是不可能的?是开源还是封闭源?预算是否允许额外的前期成本(以适当的模块化方式设计和开发)以实现预期的未来收益(不必模块化单片初始实施)?
如果您开发了许多小捆绑包,则可以提高灵活性,但代价是增加了复杂性。您可能必须将通用接口抽象到自己的模块中,而其他模块使用这些模块进行相互交互。如果你看一下类似Eclipse IDE的东西,它有很多捆绑(100+?),其中一些本身就很大,试图破译它们如何组合在一起而没有一些非常好的文档或路线图就像拔牙一样
您能否提供一些特定应用的具体细节?这可能有助于缩小建议范围。
答案 1 :(得分:0)
还有一条建议:看看OSGi的版本控制功能。您可以指定另一个捆绑包所需的最小(和最大)版本。
答案 2 :(得分:0)
它可能不适合你,但我喜欢这本书(用德语,我认为没有可用的翻译):http://www.dpunkt.de/buecher/2635.html
答案 3 :(得分:0)
我认为你的问题没有直截了当的答案。它是一个软件工程问题,如果有一个短语适用它的“它取决于......”。
分解的一般思想是通过组合解决大型问题的解决方案来解决复杂性,从简单的解决方案到较小的问题(即分而治之)。不应该增加复杂性,而是以这种方式构建系统应该更容易。从实践来看,这通常可以正常工作,只要“模块”松散耦合,即不会引入太多的相互依赖。
权衡有时可能会在每个模块中投入更多的工作,具体取决于模块应该独立的程度(例如:Felix在某些模块中嵌入XML解析器以避免依赖;或者它提供了各种机制配置,以便捆绑不依赖于其他服务;总会有某种权衡......)
还有一些机制可以获得构图的视觉概览,即使你有一个复杂的构图,请参阅"Visualizing OSGi Systems"(我还记得看过一些带图形图的BEA演示......)。
我已经在Coalevo Project工作了一段时间(对不起,链接目前正在关闭,因为我处于过渡阶段),我认为它已经在很大程度上起作用,也许未来的节目多少钱。)
从我的观点来看,我认为这个决定应该是战略性的,超越单个项目的观点。
另外请注意,在今天的情况下,大多数商业J2EE容器都位于OSGi之上(BEA是,Websphere,JBoss在某种程度上,Glassfish正在开发中),也许前期成本因您而大大降低可以从各种不同的提供商处获得现成的即用型捆绑包(这一直是OSGi愿景的基本要素)。
期望看到更多模式随着时间的推移而出现,这将有助于为模块化“正确”设计OSGi软件; OSGi本身确实提供了动态模块化系统的基本定义,但我认为构建在其上的软件本身并不仅仅是模块化的。
我一直在努力在这个领域工作;看看"OSGi Mediator"。
对我来说,OSGi可能处于节点规模,如果做得好,SOA可以在大规模的分布式规模上进行。