теория
Теперь самое интересное: что именно переезжает в платёжный сервис, а что остаётся снаружи. Тут легко ошибиться, поэтому пойдём медленно.
Правило одно, и оно простое: у каждого факта — один владелец. Платежи владеют фактом платежа: попытка списания, её статус, идентификатор транзакции у банка. Это их данные, их таблицы, их истина. А вот сумма заказа, скидка, комиссия — это не их знание: им владеют Заказы и Цены. И раз владелец не Платежи, то и лезть в это напрямую они не вправе — только спросить.
Дальше — соблазн, о который спотыкаются почти все. Платежам ведь нужна сумма; так, может, скопировать к себе таблицу цен и правило расчёта, чтобы считать самим? Не надо. Это : ты тащишь в платёжный сервис чужую доменную модель со всеми её будущими рефакторингами. Правило расчёта скидки заживёт в двух местах, и первый же хотфикс в Ценах разведёт копии — привет, инцидент из седьмого модуля, только теперь ещё и за сетью.
Верный ход — узкий контракт. Платежам не нужна модель ценообразования. Им нужно одно число: сколько списать по этому заказу. Заказы, у которых итог по заказу и так на руках (сумму корзины им считают Цены), кладут готовую сумму и валюту прямо в команду «списать» — один заход по сети, никакого зеркала чужой модели.
Вот и весь принцип границы: переноси то, чем сервис по-настоящему владеет, а недостающее бери узким контрактом — минимумом знания, а не копией чужого мира.