Когда стоит использовать command bus?

Всем привет,
В каких случаях стоит использовать commandBus? Стоит ли использовать его для обычного crud?
Я использую симфони и мне нравится компонент форм который он предоставляет.
public function new(Request $request): Response
    {
        $command = new CreateCurrencyCommand();
        $form = $this->createForm(CurrencyType::class, $command);
        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {
            $this->commandBus->handle($command);

            return $this->redirectToRoute('admin_currency_index');
        }

        return $this->render('admin/currency/new.html.twig', [
            'form' => $form->createView(),
        ]);
    }

Содержимым формы является CreateCurrencyCommand (Обычная DTO которая содержит поля и геттеры/сеттеры) и создание валюты выглядит очень даже не плохо, очень тонкий контроллер и бизнес логика вынесена в отдельный обработчик, который создает сущность и сохраняет её в бд.
Проблема возникла когда я попробовал сделать то же самое для редактирования, главная проблема заключается в данных для формы, так как уже используется CreateCurrencyCommand вместо UpdateCurrencyCommand. Вот как выглядит метод редактирования без вмешательства команд
public function edit(Request $request, Currency $currency): Response
    {
        $form = $this->createForm(CurrencyType::class, $currency);
        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {
            $this->getDoctrine()->getManager()->flush();

            return $this->redirectToRoute('admin_currency_index');
        }

        return $this->render('admin/currency/edit.html.twig', [
            'currency' => $currency,
            'form' => $form->createView(),
        ]);
    }


И тут я вижу 2 варианта:
1. Сделать универсальную команду без разделения на создание/редактирование/удаление (если делать по такому способу то как команду и обработчики лучше раскладывать по папкам?)
2. Сделать 2 формы для создания и редактирования и для каждой дать свою команду, что делать мне как-то не очень хочется.
3. Не использовать команды при crud операциях.
Это самый простой пример создания сущности. Для данного случая можно оставить как есть и метод не будет большим, но ведь не каждое создание выглядит так просто.
Посоветуйте как лучше поступить? И почему? Возможно стоит это делать каким нибудь другим способом который вы знаете.
  • Вопрос задан
  • 324 просмотра
Пригласить эксперта
Ваш ответ на вопрос

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

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