Що стосується мікросервісів, то життєві цикли розвитку послуг також повинні бути незалежними. *
Різні SLDC та різні команди розробників
в реальній системі МС може бути декілька команд, що беруть участь у розвитку екосистеми, кожна з яких відповідає за одну чи кілька служб. У свою чергу, ці команди можуть розташовуватися в різних офісах, містах, країнах, планувати ... Можливо, вони навіть не знають один одного, що робить обмін знаннями або кодом дуже важким (якщо це можливо). Але це може бути дуже зручно, оскільки спільний код також передбачає своєрідне міркування щодо спільного використання, і слід пам’ятати щось важливе - те, що має сенс для конкретної команди, не повинно робити це для іншої команди. Наприклад, з огляду на Клієнта DTO , це може бути різним залежно від послуги, що відтворюється, оскільки клієнти трактуються (або сприймаються) по-різному від кожної послуги.
Різні потреби, різні технології
Ізольовані SLDC також дозволяють командам вибрати стек, який найкраще відповідає їх потребам. Введення DTO, реалізованих за певною технологією, обмежує можливість вибору команд.
DTO не є ні діловими правилами, ні договорами на послуги
Що таке насправді DTO? Звичайні об'єкти, які не мають іншої мети, крім переміщення даних з однієї сторони на іншу. Сумки геттерів та сетери. Це не те саме "знання", яке варто використовувати повторно, загалом тому, що його немає взагалі. Їх мінливість також робить їх поганими кандидатами на зв'язок.
На противагу тому, що заявив Дерік, сервіс повинен мати можливість змінювати свої DTO, не змушуючи при цьому змінювати інші служби. Служби повинні бути толерантними читачами, толерантними письменниками та невідповідними . В іншому випадку вони викликають з'єднання таким чином, що не має сенсу архітектуру служби. Ще раз, і всупереч відповіді Деріка, якщо для трьох служб потрібні саме ті самі DTO, ймовірно, щось пішло не так під час розкладання служб.
Різні справи, різні інтерпретації
Хоча між послугами можуть існувати (і будуть) наскрізні концепції, це не означає, що ми повинні нав'язувати канонічну модель, щоб змусити всі служби інтерпретувати їх однаково.
Вивчення проблеми
Скажімо, наша компанія має три відділи: обслуговування клієнтів , продаж та доставка . Скажіть, що кожен із цих випусків по одній або більше служб.
Служба підтримки клієнтів, завдяки своїй доменній мові , реалізує послуги навколо концепції клієнтів, де клієнтами є особи . Наприклад, клієнтів моделюють як ім'я , прізвище , вік , стать , електронну пошту , телефон тощо.
Тепер скажіть, що продаж та доставка моделюють свої послуги відповідно до відповідних мов домену. У цих мовах клієнт- концепт виявляється занадто, але з тонкою різницею. До них, клієнти не є (обов'язково) людина . Для продажу , клієнти є номер документа кредитної картки і платіжний адреса , для Доставки в повне ім'я та адресу доставки теж.
Якщо ми змусимо продаж і доставку прийняти канонічну модель даних служби обслуговування клієнтів , ми змушуємо їх працювати з непотрібними даними, які можуть призвести до виникнення зайвих складностей, якщо їм доведеться підтримувати повне представництво та тримати дані клієнта в синхронізації з обслуговуванням клієнтів. .
Пов'язані посилання
* Ось де сильні сторони цієї архітектури
proto
файлом для gRPC абоavro
схемою для Kafka та генерувати DTO в обох службах, але я б не поділив спільну бібліотеку між двома проектами.