Можно ли использовать сервисы в rich моделях?

Главный по сути вопрос в том, могу ли я использовать классы из сервисного слоя через DI в rich моделях, само состояние модели при этом менять только внутри обьекта? Если нет и нужно все равно писать абсолютно всю логику в обьекте модели, то тогда он станет просто god обьектом на 100500 строчек, а это нехорошо или в идеале сервисный слой при rich моделях должен быть минимален(к примеру только для отправки емейл и т.д.) и не затрагивать доменную логику? Заранее спасибо за ответы
  • Вопрос задан
  • 120 просмотров
Решения вопроса 1
Maksclub
@Maksclub Куратор тега PHP
maksfedorov.ru
а? Если нет и нужно все равно писать абсолютно всю логику в обьекте модели, то тогда он станет просто god обьектом на 100500 строчек

Потому что вы все делаете наоборот!

Пишите по бизнес-процессу ваши UseCase, это некоторый хэндлер к примеру
Пример
final class HandleCheckOutShoppingCart
{
    public function __construct(Carts $carts, PaymentGateway $gateway)
    {
        $this->carts   = $carts;
        $this->gateway = $gateway;
    }

    public function __invoke(CheckOutShoppingCart $command) : void
    {
        $shoppingCart = $this->carts->get($command->shoppingCart());

        $payment = $this->gateway->captureCharge($command->charge());

        $shoppingCart->checkOut($payment);
    }
}


Потом у вас вырисовываются границы сущности, и в сущностях уже инварианты, которые контролирует эта сущность. Никаких god object
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы