TL; DR - Чи нормально поділитися бібліотекою POJO між службами?
Як правило, ми хочемо тримати обмін між службами суворо обмеженим, якщо це неможливо. Були певні дискусії щодо того, чи повинна служба, яка обмінюється даними, надавати клієнтську бібліотеку для клієнтів. Client-lib, як правило, необов’язковий для того, щоб клієнт сервісу міг користуватися і може споживати API, однак вони бажають, будь то клієнт-lib, або використовують альтернативну мову та використовують загальні аспекти бібліотеки тощо.
У моєму випадку - я вважаю службу, яка створює об’єкт даних. Припустимо, що цей об’єкт є ПЕТ. Основними даними не є об'єкт бази даних, а суто POJO. Цей POJO - це те, що визначено в API. Припустимо: домашні тварини - вік, вага, ім'я, власник, адреса, види тощо.
Сервіс 1 - PetKeeper: Він з будь-якої причини генерує домашнього улюбленця та зберігатиме всі дані, і повинен посилатися на цю послугу, щоб отримати домашнього улюбленця або внести зміни до Улюбленця, скажімо, змінити ім’я або змінити адресу потрібно через Дзвінок API до цієї служби.
Служба 2 - PetAccessor: ця служба збирає домашніх тварин і робить перевірки перевірки
Служба 3,4 - Більше проміжних дзвінків по службі
Сервіс 5 - Інтерфейс користувача
Вони дуже довільні, але справа проста. Користувацький інтерфейс або якась служба, що звертається до користувача, бажають певним чином представити цей об'єкт "PET" Він повинен викликати через API службу, яка викликає службу, яка викликає службу тощо, поки не надійде до служби, яка збирає необхідну інформацію і не розпочне ретрансляцію назад. Нарешті, сервіс інтерфейсу має об’єкт PET для відображення.
Це досить часто - але з нашим абсолютним менталітетом ми копіювали об’єкт PET у кожній службі. Принцип DRY (не повторюйте себе) застосовується лише до коду INSIDE служби і не застосовується для всіх служб, але справа все ще існує. Що робити, якщо ми додамо поле ... ми повинні змінити 5 служб POJO в кожному.
--OR-- Ми можемо надати бібліотеку Pet-Objects, яка містить частину pojo з API, і кожна служба може імпортувати / залежати від бібліотеки. Існує не залежність від самих служб (служб), а лише загальна бібліотека. Мені подобається ця ідея, тому що в кожній службі є один і той же тип об'єкта, і оновлення простіше. Але мене турбують боги-об’єкти.
Які професіонали / конфесії - який найкращий дизайн? Що ви зробили для передачі даних між службами, щоб мінімізувати повторення тих же класів POJO, а також залишатись роз'єднаними?