我看到了很多关于OSGi的演讲,我认为这听起来很有希望实施更好的模块化。显然“热部署”和“并行运行不同版本的 x”也是市长的卖点。
我想知道 OSGi 承诺解决的问题是否甚至是一个问题......?它让我想起了早期的 OO,当时类似的说法是女仆:
当 OO是新事物时,最大的争论是可重用性。人们普遍声称,在使用 OO 时,只需“编写一次”,然后就可以“到处使用”。
在实践中,我只看到这适用于一些非常低级的示例。我认为这样做的原因是编写可重用的代码很难。不是从技术上讲,而是从界面设计的角度来看。您必须预测未来的客户将如何使用您的课程并预先做出正确的选择。从定义上讲,这很困难,因此潜在的可重用性优势通常无法实现。
对于 OSGi,我怀疑在这里我们可能会再次信守承诺,为我们真正没有的问题提供潜在的解决方案。或者如果我们有它们,我们没有足够大的数量和严重程度来证明购买 OSGi 寻求帮助是合理的。例如模块子集的“热部署”绝对是一个好主意,但它真正工作的频率如何?有多少不是因为事实证明您对特定问题的模块化错误?多个模块之间共享的模型实体怎么样?这些模块是否都必须同时更改?或者你是否将你的对象扁平化为基元并仅在模块间通信中使用那些,以便能够保持接口契约?
应用 OSGi 时最困难的问题是,我想,让模块化“正确”。类似于在 OO 中正确获取类的接口,使用 OSGi,问题保持不变,这次在更大的范围内,包甚至服务级别。
正如您可能已经猜到的那样,我目前正在尝试评估 OSGi 以在项目中使用。我们面临的主要问题是随着代码库的增长而增加复杂性,我想将系统分解为具有越来越少定义的交互的更小的模块。
- 鉴于没有任何框架可以帮助决定模块化什么,OSGi 有没有为您带来回报?
- 在团队中工作时,它是否让您的生活更轻松?
- 它有助于减少错误数量吗?
- 您是否曾经成功“热部署”主要组件?
- OSGi 是否有助于随着时间的推移降低复杂性?
- OSGi 是否信守承诺?
- 它满足你的期望了吗?
谢谢!