Я думаю, что я на правильном пути, используя службы OSGi + DS вместе, однако мне действительно нравится злоупотреблять им. Либо это, либо просто потрясающе. (Оба варианта все еще возможны).несколько экземпляров службы OSGi и привязка DS
Итак, давайте представим следующее приложение: это база данных дома. У меня есть два интерфейса: «Дом и окно». Предположим, у меня есть хотя бы одна реализация для каждого доступного, настроенная как ... ну как компонент, который требует создания конфигурации для создания экземпляра, и для создания новых экземпляров я просто поставлю эту конфигурацию в правую pid. (Это не фабричный компонент, ни сервисная фабрика, ни то, что официальное название? Вот отличный post about it от Neil).
Пока все хорошо, это работает как шарм.
Дома - это только те, дома. Имейте свой собственный адрес, каждый из них отличается, легко идентифицируется по их собственности на улицу. Тем не менее, экземпляры окон можно разделить между домами; их конфигурация в основном равна ширине и высоте.
Теперь эти компоненты могут также связываться друг с другом в конфигурации мощности 0..n (даже если вы не хотите жить в доме без окон). Таким образом, каждый дом имеет список окон, и для каждого типа окна мы знаем, в каком доме есть (отношение «многие ко многим»).
Моя проблема заключается, скажем, в двух домах используются одни и те же три окна. Как я могу это описать? Я чувствую, что фильтрация на основе свойств недостаточно выразительна. Я также чувствую, что, возможно, это неправильный способ заставить среду создавать объекты, но это просто удобно.
Мысли? Я злоупотребляю или использую его по назначению?
(Я мог бы также использовать DS, чтобы получить только половину выполняемой работы: привяжите либо список объектов к экземплярам экземпляра Window, либо vica versa, а затем экземпляр компонента может вызвать функцию registerWhatever() на целевых экземплярах - но тогда мне все же нужно как-то описать эту половину.)
Я пытаюсь упростить реальную модель здесь, но это довольно близко к тому, что я на самом деле пытаюсь сделать. Вы правы, что это похоже на смешивание доменных объектов с сервисами и, возможно, я могу злоупотреблять им. Итак, скажем, вы хотели бы создать вышеупомянутое домашнее приложение, используя OSGi - как бы вы создали эту архитектуру? – Zoltan
@ Zoltan: Снова трудно сказать, не зная больше о требованиях. Если это простое приложение CRUD, у вас может быть какой-то компонент HousePersister, который загружает/сохраняет объекты домашнего домена из службы DataSource. –