Gleb
Павел
Т.е. в слое домена не только сущности. И вот как раз это о том, что бы вычленять бизнесовую логику.
Gleb
Ага, но у нас же все равно получается что БЛ зависит от сущностей. Или мы уходим от зависимостей на другие сервисы?
Павел
Павел
Постучаться в репозиторий - это не БЛ
Павел
Достатать сущность - это не БЛ
Павел
Даже сохранить сущность - это не БЛ
Павел
Gleb
БЛ - это не про сохранить, достать. А про то, на каких условиях сохранить/достать получается.
Nikolay
Павел
@oleynikgleb вот еще можете посмотреть https://ocramius.github.io/doctrine-best-practices/
Павел
Павел
В случае кредита - это условия выдачи кредита и построение процентов. Откуда они прилетели и куда улетят - пофиг.
Павел
Не, ну если ваше приложение продает графики и это бизнесовая логика - то да.
Gleb
Да, я так и понимаю, просто некорректно выразил свою мысль и не уточнил, что получение/запись данных это не к БЛ.
Юра
Юра
Но есть и дельные не спорю
Павел
Ну а вообще любой совет - это совет, и надо пропускать через здравый смысл и свой домен
Юра
Свой валидатор )
Юра
Мне кажется вот честно, что если прочитать всех советчиков и авторов умных книг, то просто страшно вообще код писать
Юра
По-любому нарушишь десять паттернов и все возможные инварианты
Павел
Павел
Та же анемика неплоха, где нет логики
Юра
Да так и есть. Знать не значит все использовать
Юра
Вообще любое решение обычно имеет не только плюсы но и минусы автоматически. Все надо взвешивать
Павел
чет щелкал туда сюда
Юра
ОРМ просто странная концепция. Вроде и доменя но без логики. И вроде как сами по себе модели не зависят от бд, т.е. это и не инфраструктура.
Юра
Какой вот это слой? Я про энтити
Юра
Или орм это и есть просто о дельный слой?
Юра
Слой орм
Юра
Почему нет )
Юра
Павел
Павел
Если вы там не делаете БЛ - это лишь ваши личные предпочтения
Юра
Да тут был холивар давно где говорили про анемик модели и логику выносить из энтити
Павел
Юра
Это не мои предпочтения
Павел
Обычно топят ровно наоборот, даже в этом докладе
Юра
Это как раз большинство чата тогда топило за анэмик модели
Павел
Юра
Ну типо
Юра
Энтити это не сервис
Юра
Как она получит сервис
Юра
Сразу в метод передавать можо конечно
Юра
И потом понеслось что если логика требует сервис то это одно, а не требует то это другое
Юра
Короче болото черт ногу сломит
Павел
Можно передавать в энтити сервис, правда желательно чтобы он сам был без зависимостей.
Можно оставить логику в сервисе и тащить данные из энтити.
Но в том,и в том случае энтити в слое домена
Юра
Слой домена я так понимаю содержит не только логику
Павел
Как можно вообще говорить о ДДД и анемике, если сам ДДД подразумевает рич
Юра
Та хз не спрашивай
Юра
Ч отказываюсь в это вступать
Павел
))))
Павел
Ну если говорить о риче плюсы:
- Истинная инкапсуляция
- Жесктость модели и сохранение инвариантов.
Минусы:
- надо уметь дробить, чтобы сущность не выросла до миллиона строк) Но даже когда разрастается, это все еще можно контролировать, просто неудобно.
Анимик плюсы:
- не надо задумываться что как дробить, так как все в сервисах, можно вытащить кусками из разных энтити что надо и провернуть операцию в сервисе
Минусы:
- отсутствие инкапсуляции и отсуствие жесткости к сохранению инвариантов. Любой Петя может дернуть сущность и выполнить setProperty с любым значением.
Юра
Юра
Типо запретить дергать методы
Юра
Но такое да
Vlad
типы свои городить?)
Юра
Поймет откуда дерг идёт
Юра
И если не из сервиса то по рукам
Dmitriy
костыль какой то
Павел
И если не из сервиса то по рукам
НУ а если из сервиса? Но все равно это невалидный "дерг". Для валидности надо было например предварительно через другой сервис еще прогнать и чекер
Dmitriy
еще и линтер писать только чтобы не думать и тупо анемию сделать
Юра
Решается вообще френд классами
Юра
Но их нет )
Павел
Решается через setProperty($value, Checker $checker) , все проще)
Юра
Да можно в сеттере делать дамп стактрейс вообще
Юра
И смотреть откуда
Юра
Но это всеравно не решает вопрос инкапсуляции
Павел
Юра
Всеравно можно дернуть сеттер напрямую
Юра
А проверять инварианты в каждом сеттере?