Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.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能帮助降低复杂性吗?_Java_Osgi_Complexity Theory_Modularity - Fatal编程技术网

Java OSGi能帮助降低复杂性吗?

Java OSGi能帮助降低复杂性吗?,java,osgi,complexity-theory,modularity,Java,Osgi,Complexity Theory,Modularity,我在上看到了很多演示,我认为这听起来很有希望实现更好的模块化。显然,“热部署”和“并行运行不同版本的x”也是主要的卖点 我想知道OSGi承诺解决的问题是否是一个问题。。。?这让我想起了OO的早期,当时也有类似的说法: 当OO是一个新概念时,最大的争议是可重用性。人们普遍认为,当使用OO时,只需“编写一次”,就可以“在任何地方使用” 在实践中,我只在一些非常低级的例子中看到了这一点。我认为这是因为编写可重用代码很难。不是从技术上,而是从界面设计的角度。你必须预测未来的客户会如何使用你的课程,并提前

我在上看到了很多演示,我认为这听起来很有希望实现更好的模块化。显然,“热部署”和“并行运行不同版本的x”也是主要的卖点

我想知道OSGi承诺解决的问题是否是一个问题。。。?这让我想起了OO的早期,当时也有类似的说法:

当OO是一个新概念时,最大的争议是可重用性。人们普遍认为,当使用OO时,只需“编写一次”,就可以“在任何地方使用”

在实践中,我只在一些非常低级的例子中看到了这一点。我认为这是因为编写可重用代码很难。不是从技术上,而是从界面设计的角度。你必须预测未来的客户会如何使用你的课程,并提前做出正确的选择。从定义上讲,这是很困难的,因此潜在的可重用性好处往往无法实现

有了OSGi,我怀疑在这里我们可能会再次陷入承诺,为我们实际上没有的问题提供潜在的解决方案。或者,如果我们有它们,我们没有足够的数量和严重性来购买OSGi以寻求帮助。例如,模块子集的“Hotdeployment”绝对是一个好主意,但它真正起作用的频率是多少?不是因为您在特定问题上的模块化错误,而是多久发生一次?多个模块之间共享的模型实体如何?这些模块是否必须同时更换?或者您是否将对象展平为基本体,并仅在模块间通信中使用这些基本体,以便能够保持接口契约

应用OSGi时最难的问题是,我想,要使模块化“正确”。与在OO中正确地获得类的接口类似,使用OSGi,问题仍然存在,这次是在更大的范围内,在包甚至服务级别上

正如您可能已经猜到的,我目前正在尝试评估OSGi,以便在项目中使用。我们面临的主要问题是,随着代码库的增长,复杂性不断增加,我想将系统分解为更小的模块,这些模块具有越来越少的定义交互

  • 鉴于没有任何框架可以帮助您决定模块化什么,OSGi是否为您带来了回报
  • 团队合作是否让你的生活更轻松
  • 它有助于减少bug数量吗
  • 您是否成功地“热部署”了主要组件
  • OSGi是否有助于随着时间的推移降低复杂性
  • OSGi遵守承诺了吗
  • 它满足了你的期望吗

谢谢

我使用OSGi已经有几年了(虽然是在eclipse项目中,而不是在web项目中)。很明显,该框架并没有让您从如何模块化的思考中解脱出来。但它使您能够定义规则

如果使用包并定义(在设计文档中?口头?)某些包可能无法访问其他包中的类,而不强制执行此约束,则该约束将被破坏。如果你雇佣新的开发者,他们不知道规则。他们会违反规则的。使用OSGi,您可以在代码中定义规则。对我们来说,这是一个巨大的胜利,因为它帮助我们维护了系统的架构


OSGi不会降低复杂性。但是它确实有助于处理它。

我在一个项目中使用了OSGI(我承认——不太多)。它提供了良好的承诺,但正如@Arne所说,您仍然需要自己思考如何进行模块化

OSGI确实帮助了我们的项目,因为它使架构更加稳定。打破模块化更加“困难”,因此我们就如何模块化所做的决定在更长的时间内保持有效。
换言之,如果没有OSGI,在交付的时间压力下,有时您或您的团队成员会做出妥协、捷径和其他黑客行为,架构的初衷也就失去了

因此,OSGI本身并没有降低复杂性,但它保护了它,使其不会随着时间的推移而不必要地增长。我想这是件好事:)

我还没有使用热部署功能,所以我不能对此发表评论

为了回答你的最后一点,它确实满足了我的期望,但它需要一个学习曲线和一些适应,而且回报只是长期的


(作为旁注,你的问题让我想起了一句格言,“maven是构建系统的awt”)

我现在使用OSGI已经超过8年了,每次我投身于一个非OSGI项目时,我都会感到没有安全带就超速。 OSGI使项目设置和部署变得更加困难,并迫使您提前考虑模块化,但它使您能够轻松地在运行时强制执行规则。 以maven apache camel为例。当您创建一个新的maven项目并将ApacheCamel添加为依赖项时,应用程序似乎具有所有的依赖项,并且您在运行时只会注意到ClassNotFoundExceptions,这很糟糕。当您在OSGI容器中运行并加载ApacheCamel模块时,具有未满足依赖项的模块不会启动,并且您预先知道问题所在


我也一直在使用热部署,并在不需要重新启动的情况下动态更新应用程序的某些部分。

OSGi获得了回报,因为它在运行时强制模块化,这是您以前没有的,通常会导致纸面设计和实现脱节。这可能是开发过程中的一大胜利

如果您让团队专注于单个模块(可能是一组捆绑包),并且如果您正确地实现了模块化,那么这无疑有助于简化团队工作。有人可能会说,我们可以用Ant+Ivy或Maven等构建工具和依赖项做同样的事情,OSGi使用的依赖项的粒度在我的opi中