首页 > 解决方案 > DTO/POJO 是否上升到 OSGi/DS 中可配置服务的资格?

问题描述

注意:这是我将要提出的一系列问题中的第一个问题,所有问题都与同一环境有关。

目前,我使用 ConfigurationAdmin 服务作为配置持久性机制、哑数据持有者和方便的跨捆绑更新器。这感觉不对,所以我试图让它更正确。

我正在编写一个游戏,其中一切都应该在运行时进行配置。这使我沿着 ConfigurationAdmin 路线将事物连接在一起。

游戏本质上不做任何事情,相反,功能是由可用捆绑包的组合提供的。

一个包介绍了物种的概念。为了保持尽可能高的灵活性,物种实际上只是一个名称。

@Component(...)
@Designate(...)
class Species {

    lateinit var name: String

    @Activate
    fun activate(config: SpeciesConfig) {
        name = config.name
    }
}

与 Species 相关的所有附加功能必须由单独的 bundle 提供。例如,另一个捆绑包引入了口袋妖怪的概念。口袋妖怪只是一个物种的成员,就像人类是智人物种的成员一样。

@Component(...)
class Pokemon {

    @Reference
    lateinit var species: Species
}

我一直在使用声明式服务 (DS) 来自动设置species引用。

但是,在这里,您可以看到既不是服务Species也不Pokemon是真正的服务,而是Species名称和持久身份,并且Pokemon是持久身份,并且是对Species. 可以为这些类实现的唯一方法是通常hashCodetoStringequals

这种认识首先让我意识到 ConfigurationAdmin 可能不是正确的工具。这也许是一个SpeciesRepositoryPokemonRepository可能更适合存储配置的工作。

问题: DTO/POJO 之类的 Species 是否会上升到由 OSGi/DS 定义的服务资格,因为定义的 Species 范围可能从几十到数千个,而在运行时没有、一个、许多或全部可用?

编辑:我注意到 Peter Kriens 在另一个问题中说

好吧,在 OSGi 世界中,事情看起来非常简单明了:每个对象都是一个组件。因此,在非 OSGi 世界中,您需要一些 DI 引擎来进行注入。

也许有这么小的东西是可以的?

标签: kotlinosgi

解决方案


推荐阅读