TL; DR. Можно ли делиться библиотекой POJO между службами?
Как правило, нам нравится строго ограничивать обмен между службами, если это возможно. Были некоторые споры о том, должна ли служба, предоставляющая данные, предоставлять клиентскую библиотеку для использования клиентами. Клиент-библиотека обычно необязательна для использования клиентом службы и может использовать API, как им угодно, использовать ли клиент-библиотеку или использовать альтернативный язык и использовать общие аспекты библиотеки и тому подобное.
В моем случае - я рассматриваю сервис, который создает объект данных. Давайте предположим, что этот объект является ПЭТ. Это не объект базы данных, а строго POJO, который неявно представляет базовые данные. Этот POJO - это то, что определил API. Предположим: домашнее животное - возраст, вес, имя, владелец, адрес, вид и т. Д.
Сервис 1 - PetKeeper: он будет генерировать питомца по любой причине и сохранит все данные и должен ссылаться на эту услугу для получения питомца или внесения изменений в питомца, скажем, изменение имени или изменение адреса должно быть выполнено через API вызов этого сервиса.
Служба 2 - PetAccessor: эта служба собирает питомца и делает проверки
Сервис 3,4 - Дополнительные промежуточные сервисные звонки
Сервис 5 - Интерфейс пользователя
Это очень произвольно, но суть проста. Пользовательский интерфейс или какой-либо пользовательский сервис желает каким-то образом представить этот объект «PET». Он должен вызывать через API сервис, который вызывает сервис, который вызывает сервис и т. Д., Пока он не достигнет сервиса, который собирает необходимую информацию и запускает ретрансляцию. Наконец, у сервиса UI есть объект PET для отображения.
Это довольно часто - но с нашим абсолютным менталитетом мы дублировали объект PET в каждом сервисе. Принцип СУХОЙ (не повторяйся) применим только к коду ВНУТРИ услуги и не распространяется на другие службы, но суть все еще в силе. Что если мы добавим поле ... мы должны изменить 5 сервисов POJO в каждом.
--OR-- Мы можем предоставить Pet-Objects-Library, которая содержит некоторые pojo из API, и каждый сервис может импортировать / зависеть от библиотеки. Нет зависимости от самих сервисов, но есть только общая библиотека. Мне нравится эта идея, так что каждый сервис имеет один и тот же тип объекта, и обновления проще. Но я беспокоюсь о Боге-объектах.
Какие плюсы / минусы - какой дизайн лучший? Что вы сделали для передачи данных между сервисами, чтобы минимизировать повторение тех же классов POJO, оставаясь при этом не связанными?