Задать вопрос

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

Главный по сути вопрос в том, могу ли я использовать классы из сервисного слоя через DI в rich моделях, само состояние модели при этом менять только внутри обьекта? Если нет и нужно все равно писать абсолютно всю логику в обьекте модели, то тогда он станет просто god обьектом на 100500 строчек, а это нехорошо или в идеале сервисный слой при rich моделях должен быть минимален(к примеру только для отправки емейл и т.д.) и не затрагивать доменную логику? Заранее спасибо за ответы
  • Вопрос задан
  • 124 просмотра
Подписаться 1 Средний Комментировать
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 1
Maksclub
@Maksclub Куратор тега PHP
а? Если нет и нужно все равно писать абсолютно всю логику в обьекте модели, то тогда он станет просто 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
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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