Какой объект я должен иметь в команде?

Я написал систему, следуя гексагональной архитектуре.

У меня есть асинхронные команды и синхронизировать объекты запроса, разделенные в UseCase.

Моя папка src выглядит так:

-src
--Entity
---Task.php
--UseCase
---Command
----CreateTask
-----CreateTaskUseCase.php
-----CreateTaskCommand.php

Мой вопрос: что я могу / должен использовать для отправки данных с помощью команды в конструкторе UseCase\Command\CreateTask\CreateTaskCommand

  • \Entity\Task
  • Создайте UseCase\Command\CreateTask\Request\Task что бы все необходимые данные
  • только строка / int / float

Это тривиальный пример, чтобы показать проблему.

Прямо сейчас я использую объект из домена (Entiti\Task так далее)
В реальной ситуации у меня есть UseCase\Command\CreateProcess что нужно

  • UUID
  • Экземпляр [идентификатор, имя]
  • Источник [идентификатор_узла, имя_узла, идентификатор_листа, имя-листа]
  • Ресурс [идентификатор, имя, тип и т. Д. Нормальные типы Персона [имя, фамилия]]

Следуя DDD, Process является моей совокупностью. Все сущности существуют только благодаря конструкции Process (Node, Leaf, Resource, Person). Тогда я не хочу отдельным способом создавать другие объекты, потому что таким образом работает моя бизнес-логика.

В связи с этой проблемой возникает вопрос: что мне выбрать? Нарушение некоторых правил?

Проблемы:

  • Команда bind с Object изнутри Домена, более привязывает более высокий уровень к ядру. Любое изменение в ядре приведет к цепной реакции со всеми слоями.
  • Создание Request\* Сделайте мне много классов, но понятный способ использования команд и многое другое — unitTest и т. д.
  • Использование только стандартного типа (int, string и т. Д.) Приведет к __counstruct с 20 аргументами. Я не хочу многоуровневый массив, так как не будет ясно, использовать эту команду.

Спасибо за помощь.

2

Решение

Через некоторое время и опыт — лучший вариант — использовать стандартные данные из PHP. В конце концов, полезно создавать объекты для этой команды (второй вариант), но это потребует времени для создания классов и тестов.

Никогда не используйте что-то из домена — это огромный недостаток в будущем.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]