Чем в lravel 5.1 представлен UseCase слой приложения?
Хочу навести "чистую архитектуру" в приложении ларавел, но тут кажется нет слоя между контроллерами и моделями из коробки, то бишь UseCase, или может есть но я не не знаю?
UseCase - это и есть логика вашего приложения, она по-определению каждый раз разная, так что ни в какой слой ее не обернуть. С другой стороны, есть Jobs (aka Commands), которые помогают выносить бизнес-логику из контроллеров. Но и сами команды не рекомендуется делать слишком толстыми.
Да но порой с формы приходят например две сущности и во первых хочется создать общий обработчик которы запускает например трансакцию а потом это все делится на два маленьких обработчика для каждой из сущностей. Глянул на job но разве они не в отдельном процессе работают? а так же есть Handlers(commands,events) и просто Commands и что из этоо Aka Jobs?
То есть задача такая, чтобы контроллеры можно было в любой момент подменить на APiКонтроллеры(убрать вонючие обычные формочки) а потом хоть CLI и менялась равзе что одна строка а сервисы или как там Commands уже обрабатывали бизнес логику и дергали модели
ГЛЕБ ГЛЕБОВ: jobs == commands (команды просто переименовали в 5.1). Обычно используются команды, которые сами себя обрабатывают - просто прямо в классе команды добавляется метод handle. Они выполняются в потоке приложения, вы путаете их с консольными командами (именно потому и переименовали).
То есть задача такая, чтобы контроллеры можно было в любой момент подменить на APiКонтроллеры
Вот для этого и подойдут Jobs. В html-контроллере вы обрабатываете запрос (получаете данные из форм) и выполняете SomeJob. А потом создаете отдельный контроллер (или консольную команду), в которой точно так же обрабатывается ввод, подготавливаются аргументы для SomeJob и она выполняется. В итоге бизнес-логика не дублируется.
Алексей Уколов
Поправьте меня если гоню но
class CreateJob extends Job implements SelfHandling
так это обычный джоб(обычный в смысле не в фоновом процессе
А так
class CreateJobi extends Job implements SelfHandling, ShouldQueue
С Queue в фоновом процессе отрабатывает
ГЛЕБ ГЛЕБОВ: Commands deprecated. Их сейчас оставили только для совместимости, а так они полностью заменены на Jobs. Я лично предпочитаю разделять команды, которые отдают результат вызвавшему их контроллеру от команд, которые просто запускаются и чего-то кладут в очередь (Первые я несмотря на deprecated держу именно в папке Commands). И еще на затравку - между вашими командами и моделями можете репозитории положить дополнительным слоем :) вдруг потом захотите вместо eloquent использовать доктрину или сырые запросы к базе, либо если пилите опенсорс, то вместо вас это может захотеть сделать кто-то другой.