Arcos
прокидывать все зависимости в методы / контроллеры класса,вместо event юзать 'Illuminate\Events\Dispatcher', например и так далее
Справедливо наверное. Но ни разу сам не использвал миддлвары. Судя по доке - их можно в конструктор запихать. Тогда мой класс бесполезен :)
Владислав
обязательно попробуйте, это нужная вещь.
Владислав
в миддлварах вся валидация должна быть.
Владислав
в контроллере уже валидация логики, но не входных данных.
Arcos
ок. заюзаю. 😊 поработать копипастером придется конечно, но не страшно 😊
Arcos
Пока не знаю как миддлвары ведут себя в тестах
Arcos
Но узнаю 😊
Владислав
а я до сих пор тесты не писал под реальные проекты ) вот как раз собираюсь )
Александр
какой смысл миддлваре тестить отдельно? или контроллеры даже
Владислав
кстати, вот насущный вопрос: что тестировать? говорят, что нужно тестировать всё, что может вести себя не так, как ожидается. то есть, всё, что написал сам, например, какие-то методы не из коробки.
Владислав
верно ли это?
Александр
Ты сначала подумай, для чего нужны тесты, чтобы не писать тесты ради тестов
Александр
А там уже будет понятно, какие кейсы в каких местах тестировать
Владислав
тесты нужны чтобы было понимание, что при очередном изменении кода текущий код не был сломан.
Arcos
Я тесты пишу для а) проверки логики, б) построения архитектуры
Anonymous
ребят, подскажите а куда лучше выносить сложную логику? Я так понимаю для этого сервисы нужно делать?
Anonymous
+
а как их лучше организовать и связать с приложением? Как тестировать?
Владислав
Я тесты пишу для а) проверки логики, б) построения архитектуры
а как тесты помогают в построении архитектуры?
Anonymous
а по сути работа с моделями в идеале должна тоже через сервисы быть?
Anton
https://medium.com/@remi_collin/keeping-your-laravel-applications-dry-with-single-action-classes-6a950ec54d1d
Александр
а как их лучше организовать и связать с приложением? Как тестировать?
организовать как имплементации интерфейсов, т.е. каждый сервис какойто интерфейс имплементит. потом проще мокать будет, или юзать несколько разных реализаций интерфейса исходя из контекста. зависимости прокидывать исключительно через DI, никаких фасадов или хелперов в сервисах
Anonymous
https://medium.com/@remi_collin/keeping-your-laravel-applications-dry-with-single-action-classes-6a950ec54d1d
а скажи, где в таком случае долна модель быть тоже в сервисе?
Anton
? Не понял
Anton
Модель это модель
Anton
сервис это сервис
Anton
В сервисе должна идти бизнес логика
Владислав
test driven development же
сперва тест, потом реализация, знаю. я думал, как-то иначе, ОК, спасибо
Anonymous
у тебя в статье сервис зависит от модели
Anton
и ?
Ivan
https://medium.com/@remi_collin/keeping-your-laravel-applications-dry-with-single-action-classes-6a950ec54d1d
Есть ли выгода в такой архитектуре, когда есть ТОЛЬКО веб версия или только АПИ? В таком случае у нас будет по сути экш в экшене
Anton
Я или не проснулся или чет не понимаю, в чем вопрос
Anton
Ребят статья не моя )) Это пример как выносить логику из контролеров и модели
Anton
Парень в стать называет это дело Action
Ivan
Я думла ты пробовал
Anonymous
Ребят статья не моя )) Это пример как выносить логику из контролеров и модели
а ты не знаешь хорошие проекты на гитхабе которые можно поизучать где такой подход реализован?
Anton
у него оно отличается от Jobs тем что оно может возвращать значения
Anton
Я так примерно и делаю ток я сервисами обзываю
Ivan
а вынести логику можно просто создав отдельный класс у меня такие классы хелперами называются
Anton
Ну хоть "Беда" назови )
Anton
главное что б суть ясна была
Anonymous
Я не пойу что тебе не ясно то ?
ну почему к примеру как Иван говорит не создать отдельный класс, а делать сервис и через DI прокидывать его, в чем к примеру тут профит
Александр
а вынести логику можно просто создав отдельный класс у меня такие классы хелперами называются
название хелпер как то не вяжется с single responsibilty принципом. когда вижу хелпер/manager классы, чаще всего оказывается что в них куча разного шлака понапихано, этакие god objects
Anonymous
не ясно еще как связывать эти сервисы.. Допустим в статье userservice почему то зависит от блога.. Думаю это можно как то лучше и гибче сделать
Anton
Ты не понял, сервис выполняет по факту какое то действие, которое несет в себе логику
Anton
ТЫ его выносишь из Модели и Контроллера для того что б не привязываться к системе скажем так
Anton
Т.е. Сервис получает объекты и что то с ними делает и отдает какой то результат
Anton
Это улучшает читабельность кода, и помогает при миграции проекта
Anton
Еще он спасает тебя от дублирования кода
Anton
пример
Arcos
сперва тест, потом реализация, знаю. я думал, как-то иначе, ОК, спасибо
Я пытаюсь написать тест на проверку планируемой логики. И пока я не смогу прогнать тесты (в идеале) без бд, ну или с минимальным обращением к бд - я не считаю логику хорошей
Anton
Есть у тебя сложное создание пользователя, которое завязано на каких то действиях, там человеку счет открыть или привзяать его проекту или еще что то
Anton
И у тебя два действия(маршрута) которое это делают
Anonymous
Т.е. Сервис получает объекты и что то с ними делает и отдает какой то результат
ну смотри, к примеру у меня есть товар.. Есть скажем сервис корзины, в который я могу пихнуть этот товар и сервис заказа, которому я также хочу отдать товар.. Вопрос в том, что такое товар и как его связать правильно с несколькими сервисами
Anton
Один тупо создание юзера, второй импорт массовый, если ты не используешь сервис, вероятность того что ты повторишь код велика
Anton
Корзина это у тебя не сервис это по факту сущность
Anonymous
Я так понимаю через контракты (интерфейсы), но что будет если несколько сервисов имеют очень похожие контракты.. Или как вариант товар, корзину и сервис заказа объединить в какой то глобальный модуль, чтобы они могли знать друг про друга
Arcos
с актив рекордом это ой как геморно, либо юзать доктрину либо самопальные реализациирепозиториев
А почему, собствннно это так? Потому что у тебя нет возможности протестиповать обработку данных. Ты сразу их потом сохраняешь
Arcos
В теории класс должен получить данные и вернуть результат
Arcos
А там уже делай что хочешь с ним
Александр
я их не сохраняю
Александр
я из них получаю какие то поля
Arcos
тогда не понимаю в чем проблема
Александр
в некоторых сервисах
Arcos
Можешь пример привести?
Arcos
в некоторых сервисах
моки не помогают?
Александр
моки не помогают?
помогают, проблема в том что приходится мокать по ублюдочному. магический __get, для того чтобы нужные проперти возвращались когда сервис их требует
Artem
Dead Loppi: Пыха выдержит если будет 3к запросов в секунду ?
Arcos
можно пример? интересно стало
Почему стало интересно: магический гет это реакция на отсуствующий проперти
Anonymous
Я не пойму ты пытаешься сделать какой то обособленный компонент или что ?
просто хочу понять, как все из контроллера вынести и сделать его максимально тупым
Александр
Почему стало интересно: магический гет это реакция на отсуствующий проперти
а откуда у тебя в моке модели элокуентовой возьмутся проперти заполненые с учетом того что ты в БД не лезешь?