例如,如果我想在我的应用程序中使用 OSGi 的好处(模块化、依赖注入等)而不使用 OSGi,我将采用哪些设计模式?
2 回答
您提到的两个在我的列表顶部:
模块化。您没有类加载器隔离的好处,因此您将不得不使用自己的约定来确保您不会“跨越”到其他组件。如果您认为切换到 OSGi 是您项目的未来,那么您肯定希望避免 Class.forName、Thread.getContextClassLoader 等,它们在 OSGi 环境中无法正常工作。
服务。您没有服务注册表的好处,它允许单独模块中的组件发现并相互注册,同时保持松散耦合,因此您将希望使用类似的东西。有PojoSR,但否则您可以使用依赖注入框架来松散耦合。
OSGi 的其余大部分是规范保证框架将为您做的事情(JVM 单例、安全性、管理、动态等),因此您将独自一人。查看使用 OSGi 的好处列表以了解您将缺少什么可能是最简单的。
OSGI 提供了很多开箱即用的功能。如果您不想使用它,我仍然建议使用某种框架,例如 Spring。
Spring 更容易设置并且具有依赖注入容器。您当然可以始终以创建类的方式进行自己的依赖注入。这通常有两种方法,构造函数注入,其中所需的类/对象在对象创建的构造函数参数中传递,以及设置器注入 - 类具有每个依赖项的设置器。只需确保设置所有依赖项,否则对象可能处于无效状态。
模块化可能意味着很多事情,具体取决于您想要走多远。作为一般规则,针对接口进行编程将使您获得一定程度的模块化。使用众所周知的软件架构(例如 MVC 和相关模式)将为您提供一些帮助。OSGI 使用白板模式与发布/订阅或侦听器模式,但两者都满足类似的需求。这两种模式都允许对象的广泛解耦。
如果您发布您想要实现的目标类型,我可以为您提供更多帮助。