Я думаю, что я на правильном пути, используя сервисы OSGi + DS вместе, однако, я действительно хочу злоупотреблять этим. Либо так, либо это просто потрясающе. (И то, и другое по-прежнему возможно).
Итак, давайте представим следующее приложение: это домашняя база данных. У меня есть два интерфейса, Дом и Окно. Допустим, у меня есть по крайней мере одна реализация для каждой доступной, настроенная как ... ну, как компонент, для создания экземпляра которого требуется конфигурация, и для создания новых экземпляров я просто предоставляю эту конфигурацию в правильный pid. (Это не заводской компонент или сервисная фабрика - как называется это официальное название? Вот превосходный пост об этом от Нила).
Пока все хорошо, это работает как шарм.
Дома - это просто дома. У них есть свой адрес, каждый из которых отличается, их легко узнать по их улице. Однако окна делятся между домами; их конфигурация в основном ширина и высота.
Теперь эти компоненты могут также связываться друг с другом в конфигурации с кардиналом 0..n (даже если вы не хотите жить в доме без окон). Таким образом, у каждого дома есть список окон, и для каждого типа окон мы знаем, какой дом имеет его (отношение «многие ко многим»).
Моя проблема, скажем, в двух домах с одинаковыми тремя окнами. Как я могу описать это? Я чувствую, что фильтрация на основе свойств недостаточно выразительна. Я также чувствую, что, может быть, это неправильный способ заставить фреймворк создавать экземпляры моих объектов, но это очень удобно.
Мысли? Я злоупотребляю или использую это по назначению?
(Я мог бы также использовать DS, чтобы просто выполнить половину работы: привязать либо список домов к ссылкам на него экземпляра Window, либо наоборот, и тогда экземпляр компонента мог бы вызвать функцию registerWhwhat () для целевые экземпляры - но тогда мне все равно нужно как-то описать хотя бы эту половину.)