kotlin - 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
. 可以为这些类实现的唯一方法是通常hashCode
的toString
和equals
。
这种认识首先让我意识到 ConfigurationAdmin 可能不是正确的工具。这也许是一个SpeciesRepository
或PokemonRepository
可能更适合存储配置的工作。
问题: DTO/POJO 之类的 Species 是否会上升到由 OSGi/DS 定义的服务资格,因为定义的 Species 范围可能从几十到数千个,而在运行时没有、一个、许多或全部可用?
编辑:我注意到 Peter Kriens 在另一个问题中说
好吧,在 OSGi 世界中,事情看起来非常简单明了:每个对象都是一个组件。因此,在非 OSGi 世界中,您需要一些 DI 引擎来进行注入。
也许有这么小的东西是可以的?
解决方案
推荐阅读
- java - 代码错误“org.openqa.selenium.remote.DriverCommand.NEW_SESSION”
- c - 导出 C 中的任意符号
- object-detection - ml kit对象检测api模板匹配
- nix - 如何在容器中使用 nix(不是 nixos)运行 sshd?
- python - Python中与名称相关的字符串操作
- java - 没有惰性字段的休眠克隆实体
- regex - Dart http 请求用表达式语言操作网站
- vba - 将值插入“输入”字段时出现问题
- groovy - 使用 groovy 脚本在 JSON 响应中断言对象计数
- php - PHP代码在浏览器上显示空白屏幕而不是内容