Разбираю вопрос от подписчика




sender, address, cityId — это язык внешнего контракта.
Отправитель, Адрес, ИдентификаторГорода — это язык нашей системы.
Поэтому на границе добавляем переводчик:
sender → Отправитель
address → Адрес
cityId → ИдентификаторГорода
В DDD это называют Anticorruption Layer.
В Clean Architecture — Interface Adapters.
В Hexagonal Architecture — Adapters.
Названия разные, но идея одна: внешний формат не должен становиться внутренней моделью.
Иначе пишешь не на языке своей системы, а на языке чужого API. А потом любое изменение внешнего контракта ломает бизнес-логику.
А первая проблема решается организационно: нужно зафиксировать правила, проводить code review, подключать анализаторы, SonarQube, BSL Language Server и другие инструменты.