Когда дело доходит до микросервисов, жизненные циклы разработки сервисов тоже должны быть независимыми. *
Разные SLDC и разные команды разработчиков
в реальной системе MS может быть несколько команд, участвующих в разработке экосистемы, каждая из которых отвечает за один или несколько сервисов. В свою очередь, эти команды могут быть расположены в разных офисах, городах, странах, планах ... Возможно, они даже не знают друг друга, что делает обмен знаниями или кодом очень сложным (если это возможно). Но это может быть очень удобно, потому что совместно используемый код также подразумевает своего рода рассуждение о разделении, и важно помнить, что независимо от того, что имеет смысл для конкретной команды, не обязательно делать это для другой команды. Например, учитывая клиента DTO , он может отличаться в зависимости от действующей услуги, поскольку клиенты интерпретируются (или рассматриваются) по-разному для каждой услуги.
Разные потребности, разные технологии
Изолированные SLDC также позволяют командам выбирать стек, который наилучшим образом соответствует их потребностям. Внедрение DTO, реализованных в определенной технологии, ограничивает возможности команд выбирать.
DTO не являются ни бизнес-правилами, ни контрактами на обслуживание
Что такое DTO? Простые объекты без какой-либо другой цели, кроме перемещения данных с одной стороны на другую. Сумки добытчиков и сеттеров. Это не тот вид «знания», который стоит использовать повторно, потому что знаний вообще нет. Их волатильность также делает их плохими кандидатами на связывание.
Вопреки тому, что сказал Дерик, у службы должна быть возможность изменять свои DTO без необходимости одновременного изменения других служб. Услуги должны быть терпимыми читателями, терпимыми авторами и отказоустойчивыми . В противном случае они вызывают соединение таким образом, что лишает смысла архитектуру сервиса. Еще раз, и вопреки ответу Дерика, если три службы нуждаются в одинаковых DTO, вероятно, что-то пошло не так во время декомпозиции служб.
Разное дело, разные интерпретации
Хотя между сервисами могут быть (и будут) сквозные концепции, это не означает, что нам нужно навязывать каноническую модель, чтобы заставить все сервисы интерпретировать их одинаково.
Тематическое исследование
Скажем , наша компания имеет три отдела, обслуживание клиентов , продажи и доставку . Скажите каждому из этих выпусков одну или несколько услуг.
Служба поддержки клиентов, благодаря своему доменному языку , реализует услуги, основанные на концепции клиентов, где клиенты - это лица . Например, клиенты моделируются как имя , фамилия , возраст , пол , адрес электронной почты , телефон и т. Д.
Теперь, скажем, отдел продаж и доставки моделирует свои услуги также в соответствии с языками их доменов. На этих языках концепт- клиент тоже появляется, но с небольшим отличием. Для них клиенты не являются (обязательно) лицами . Для продаж , клиенты являются номер документа кредитной карты и платежный адрес , для Доставки в полное имя и адрес доставки тоже.
Если заставить продаж и доставки принять каноническую модель данных обслуживания клиентов , мы заставляя их бороться с ненужными данными , которые могли бы в конечном итоге введение ненужной сложности , если они должны поддерживать все представление и сохранить клиента данные в синхронизации с клиентами ,
Ссылки по теме
* Вот в чем сильные стороны этой архитектуры
proto
файлом для gRPC илиavro
схемой для Kafka и сгенерировать DTO в обоих сервисах, но я не буду делить общую библиотеку между двумя проектами.