После предыдущего поста поступило несколько просьб пройтись по теме слоёв
(Layers), чтобы у всех было понимание о чём идёт речь.Об этом достаточно подробно написано в книгах ""Чистая архитектура"" Р.Мартина и DDD Эванса. Здесь мы будем рассматривать 3 базовых слоя — Infrastructure, Application и Domain.
Их можно выделить и больше, но этих достаточно, чтобы понять принцип.
Зачем они нужны?
Основными идеями выступают независимость вашего кода (от фреймворка, базы данных, внешних сервисов, UI и т.д.) и тестируемость.
Окей, звучит неплохо, что дальше?
Еще одно очень важное правило — "Правило зависимостей":
Ничто из внутреннего слоя не может знать что-либо о внешнем слое, ничто из внутреннего слоя не может указывать на внешний слой.
Пока сложно, но давайте перейдем к коду.
Слой
Infrastucture cодержит в себе всё, что связывает ваше приложение с внешним миром, например: Получение HTTP запроса и отправка ответа, отправка запросов к другим серверам, отправка сообщений в очереди и т.д. Фреймворки обеспечивают нам все внешние взаимодействие из коробки, а нам остаётся правильно писать код в тех местах, в которых мы соприкасаемся с фреймворком — в большинстве случаев это контроллеры или консольные команды.Экшен нашего контроллера может принимать request, делать валидацию для пользователя (про валидацию можно сделать отдельный пост) средствами фреймворка (или руками), создать DTO (команду) и запустить бизнес процесс (вызвать useCase / handler). Затем получит результат обработки данных и отправить пользователю информацию. В простом варианте контроллер выглядит так.
$this->createUserHandler->excecute($command) - как раз обращается уже к слою Application, который мы рассмотрим в следующем посте.#PHP #layers #middle #source