офк нечего делать).
Есть зависимость на уровне метода
class Tariff {
function makeInvoice(invoiceId, promocode) {
promocode->use(invoiceId, this->id);
// посчитать сумму для инвойса с использованием тарифа и промокода и создать инвойс
}
}
Вроде бы это естественный coupling - при создании инвойса - нужно учесть скидку из промокода, но объект промокода для соблюдения инвариантов тарифа не нужен. Может вынести это на уровень command handler-a? C null-промокодом по идее не должно быть никаких иф-ов в handler-е (но это не точно).
Что-то типа
promocode->use()
sum = tariff->calcSum(promocode)
tariff->makeInvoice(sum, invoiceId, ...)
И ещё мне не нравится неявное изменение объекта промокода в методе создания инвойса 🐒
Глянь на то как это сделано в Sylius например, и все станет ясно и понятно
Обсуждают сегодня