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

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

Главный по сути вопрос в том, могу ли я использовать классы из сервисного слоя через DI в rich моделях, само состояние модели при этом менять только внутри обьекта? Если нет и нужно все равно писать абсолютно всю логику в обьекте модели, то тогда он станет просто god обьектом на 100500 строчек, а это нехорошо или в идеале сервисный слой при rich моделях должен быть минимален(к примеру только для отправки емейл и т.д.) и не затрагивать доменную логику? Заранее спасибо за ответы
  • Вопрос задан
  • 120 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 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
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
22 янв. 2025, в 18:42
1000 руб./за проект
22 янв. 2025, в 18:00
15000 руб./за проект
22 янв. 2025, в 17:57
2000 руб./в час