Примечание. Это первый вопрос из серии вопросов, которые у меня возникнут. Все они относятся к одной и той же среде.
В настоящее время я использую службу ConfigurationAdmin в качествемеханизм сохранения конфигурации, тупой держатель данных и удобный пакетный апдейт.Это неправильно, поэтому я пытаюсь сделать его более правильным.
Я пишу игру, в которой все должно настраиваться во время выполнения.Это привело меня к маршруту ConfigurationAdmin для соединения вещей.
Игра по своей природе ничего не делает, и вместо этого функциональность обеспечивается сочетанием доступных комплектов.
Один комплектвводит понятие видов.Чтобы поддерживать как можно более высокую степень гибкости, Spec на самом деле является просто именем.
@Component(...)
@Designate(...)
class Species {
lateinit var name: String
@Activate
fun activate(config: SpeciesConfig) {
name = config.name
}
}
Все дополнительные функции, относящиеся к Species, должны предоставляться отдельным пакетом.Например, другой пакет вводит понятие покемона.Покемон - это просто член Видов, точно так же, как люди являются членами вида Homo Sapiens Sapiens.
@Component(...)
class Pokemon {
@Reference
lateinit var species: Species
}
Я использовал Декларативные услуги (DS) для автоматической установки ссылки species
.
Здесь, однако, вы можете увидеть, что ни Species
, ни Pokemon
на самом деле не являются услугами, скорее Species
- это имя и постоянная идентификация, а Pokemon
- это постоянная идентификация и ссылка наSpecies
.Единственные методы, которые могут быть реализованы для этих классов, - это обычные hashCode
, toString
и equals
.
. Это осознание того, что сначала подсказало мне, что, возможно, ConfigurationAdmin не является правильным инструментом;что, возможно, SpeciesRepository
или PokemonRepository
могут лучше подходить для работы по сохранению конфигурации.
Вопрос: Поднимаются ли DTO / POJO, такие как Виды, на квалификацию службы,определенные OSGi / DS, учитывая, что может быть от десятков до тысяч определенных видов, но ни один, ни один, многие или все они доступны во время выполнения?
РЕДАКТИРОВАТЬ: я заметил, что Питер Криенс сказал в другой вопрос
Ну, в мире OSGi все выглядит довольно просто и понятно: каждый объект является компонентом.Так что в мире, отличном от OSGi, вам нужен какой-нибудь DI-движок для впрыска.
Может быть, все в порядке, если такие маленькие компоненты будут?