首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OSGi - Bundles相互依赖

OSGi - Bundles相互依赖
EN

Stack Overflow用户
提问于 2021-12-21 17:39:43
回答 1查看 68关注 0票数 0

我有两个宾德斯

代码语言:javascript
复制
1. I18n Service (Internationalization)
2. Persistence Service (Database)

问题是,Bundle I18n使用数据库服务以不同的语言存储TextsMessages。持久化服务也使用I18m以不同的语言存储某些Error Messages,因此每个服务相互依赖,但它们不应该一起工作,因为它们都提供了不同类型的服务。

我的问题是,有谁知道PatternStrictire能帮我解决这个问题吗?我需要注册这些服务并允许它们相互使用。

在持久性服务激活器中,我有以下依赖关系:

代码语言:javascript
复制
    dependencyManager.add(createComponent()
            .setImplementation(PersistenceImpl.class)
            .add(createServiceDependency()
                    .setService(I18nService.class)
                    .setRequired(true))
    );

但是I18n不能这样做,在这种情况下,它们都不会启动:

代码语言:javascript
复制
    dependencyManager.add(createComponent()
            .setImplementation(I18nImpl.class)
            .add(createServiceDependency()
                    .setService(PersistenceService.class)
                    .setRequired(true))
    );

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2021-12-22 08:10:27

当你几乎总是遇到周期时,你就把事情弄得太复杂了。在这种情况下,高级应用程序代码应该使用的低级组件似乎做太多了“应用程序”级别的事情。这使得它们很难重用,并且倾向于创建非常复杂的系统。

我的解决方案是从数据库中删除转换,数据库应该用错误代码和一些参数报告其错误,但是消息的转换应该在更高的层次上进行,更接近用户。这样就不需要知道I18n了。

无论如何,这听起来更好,因为在数据库操作级别上,您通常并不真正了解调用方的区域设置,试图在这里实现它通常需要一些难看的解决方案,比如线程局部变量或污染调用链。所有代码都需要进行转换的设计将创建一个由不必要的耦合组成的混乱的网络。

我的金科玉律是创建可重用的低级别简单组件,每个组件的依赖性很小,然后将它们连接到应用程序组件中。这使得应用程序组件依赖于一切,而不是依赖于其他组件的依赖关系。每当我有一个依赖于服务的组件,而该服务感觉不像是其基本功能的一部分时,我就会觉得它是一个失败。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70439538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档