Dmitriy
вот с ddd in php не надо
Dmitriy
опять же имхо
Dmitriy
если вы про ту книгу про которую я думаю
Костя
ну как по мне для входа самое то
Andrey
А это не одно и тоже? 😄
Dmitriy
соглашусь
Andrey
Ну я и хочу сделать нормально
Dmitriy
и след разраб тратит 2 мес чтобы понять ддд
Andrey
Иначе бы не заходил сюда
Dmitriy
когда ты не сможешь написать легкий юнит будешь искать способ сделать проще
Dmitriy
а проще уже хорошо
Dmitriy
)
Andrey
Мне на самом деле нужна схема абстракции, через ддд или иначе - не важно
Andrey
Я понимаю, что сложно в 5 сообщений все передать
Dmitriy
у хирурга нет гит реверт
Dmitriy
а есть свободные на рынке?
Dmitriy
так это не мне
Andrey
Все говно, надо делать с нуля
Dmitriy
у меня проект сложней)
Dmitriy
и я бы за адекватные деньги взял бы архитектора
Dmitriy
но как правило все кого я видел
Dmitriy
тоже не умеют в хорошо)
Dmitriy
но я мало видел
Dmitriy
но соглашусь что на 15 крадов
Dmitriy
ддд нинужон
Andrey
Это не совсем 15 крадов
Andrey
15 сущностей - не таблиц
Andrey
15 доменов наверное правильнее
Andrey
Ну Чтобы вы понимали
Dmitriy
ну незнаю сложно без контекста что то советовать
Dmitriy
но опять же если только вот щас готовишься и читаешь про ддд
Dmitriy
то на боевом проекте увы это будет фиаско
Andrey
то на боевом проекте увы это будет фиаско
Скорее всего, поэтом не хочу усложнять
Andrey
Нет цели воплощать ДДД как в учебнике. Наверное просто он первый попался на мой вопрос в гугл о архитектуре в symfony приложении ДДД - не цель, его можно не использовать если не нужно
Dmitriy
если у тебя крад на 15 сущностей он тебе не нужен
Andrey
https://pastebin.com/HVXrRUig
Andrey
Могу написать пример сервиса, как мы сейчас думаем делать, но интересно сначала услышать варианты сообщества
Andrey
Допустим это изолированная часть приложения
Andrey
Все сущности у нас сейчас - прямой маппинг в базу.
Andrey
В чем сложность - нужно уметь работать с библиотеками
Andrey
И грамотно проверять пакеты данных о этих библиотеках и о изменениях, которые пользователь хочет сделать
Andrey
И может ли
Andrey
И в примере только шкафы, а так ещё в библиотеках есть персонал, документы к этим книгам и шкафам, логи об изменениях, уровни доступа к книгам и шкафам
Andrey
И ещё - библиотека должна смочь перехать в другой регион со всем своим архивом
Andrey
Дисклеймер: проект не про библиотеки и книги
Andrey
Ну абстрактно - всё похоже
Andrey
Просто к книгам никакого отношения не имеем
Andrey
Оценить совет можно не соглашаясь с ним
Andrey
Ответственность я понимаю
Andrey
Поэтому прошу коллективный разум мне немного помочь
Сергей
https://pastebin.com/HVXrRUig
попробуй CQS. Для каждого действия - своя команда с хендлером. Хендлеры изменяют домен и сохраняют данные. Контроллеры дёргают хендлеры
Andrey
Да проблемы глобальной нет Наговнокодить можно всегда успеть
Andrey
Это сейчас и есть пет проект
Andrey
Не продакшн
Andrey
Нужно разработать новую модель
Andrey
Назовем это новой мажорной версией
Andrey
Да, согласен
Andrey
Мы сейчас экспериментируем
Andrey
Реальные данные в этом не участвуют
Andrey
Вторая система хуже чем первая, третья - лучше чем вторая
Andrey
Есть такое
Andrey
"маленьким, элегантным и успешным системам" первая система - лапша и с ней оч тяжело работать
Andrey
К первой претензий особо нет. Нужен новый функционал и в первую он не влезает.
Maxim Kainov
Ребят, нужна помощь по архитектуре: Я не могу разложить бекенд на модели, сервисы моделей и сервисы приложения (аля DDD) Вот есть контроллер. Он принимает запрос, парсит post, дальше он должен подергать сервисы приложения и вернуть ответ. Есть сервис. Он получает репозиторий, создает в себе конструктор ентити, и имеет публичный интерфейс для контроллера. Состояния он не имеет. Есль модель (в моем случае ентити Доктрины). Там лежат данные таблицы и функции изменения этих данных геттеры, сеттеры. Есть репозитории, как коллекции ентити-моделей, для выгрузки, удаления и загрузки групп данных Естественно, классы ентити эти - с кучей связей между собой (бд на 30+ сущностей). Примеры в интернете - это 3-4 сущности и там конечно слоев абстракции городить не надо. Вопрос: если наша ентити - это класс доктрины, в DDD это домейн модел или домейн сервис? (мне кажется что сервис)
Чистую архитектуру роберта мартина читал? Там все рассказывается. Ддд это не то.
Maxim Kainov
Домейн модел это бизнес правила общие для всего приложения. Домейн сервайс это правила для каких то частей приложения. Вот и вся разница. Как реализовывать это другое дело. Кто-то пытается всю логику положить в ентити докрины, разбивает ентити на велью обжекты через ембедед классы. Но по моему проще всю логику делать в сервисах. Какие делать сервисы, с каким связями, в каком количестве, сколько слоев, это все зависит от задачи. В общем, нужно стараться высокоуровневую логику делать не зависящей от низкоуровневой. Чем ближе к вводу-выводу, тем ниже уровень.
Ivan
@Cawa87 боты атакуэ
Andrey
Домейн модел это бизнес правила общие для всего приложения. Домейн сервайс это правила для каких то частей приложения. Вот и вся разница. Как реализовывать это другое дело. Кто-то пытается всю логику положить в ентити докрины, разбивает ентити на велью обжекты через ембедед классы. Но по моему проще всю логику делать в сервисах. Какие делать сервисы, с каким связями, в каком количестве, сколько слоев, это все зависит от задачи. В общем, нужно стараться высокоуровневую логику делать не зависящей от низкоуровневой. Чем ближе к вводу-выводу, тем ниже уровень.
Книжка дяди Боба в закладках, руки не дошли Мы в итоге решили так: Ентити - рулят своими полями и методами детей Репозитории - как коллекции чтения/записи Сервисы - Бизнес логика, сервис ентити имеет его тип, DI репозитория и других сервисов для работы Контроллеры - дергают методы сервисов, ничего не знают про ввод-вывод
Andrey
Решили пусть будет проще, но зато понятно
Andrey
Спасибо всем за информацию и критическую оценку!
Dmitry
Ребят. Подскажите оптимальную стратегию определения, что поля, пришедшие с фронта несут изменения. На фронте форма 10+ полей. Юзер что то меняет в одном поле и сабмитит форму. В контроллер приходят все 10 полей. В какой момент лучше определять, что изменено одно поле? - Верить фронту и с фронта отправлять только измененные поля? - Сделать DTO с сеттерами, инициировать её начальными данными и в момент десериализации определять "новое !== текущее" и заполнять некий массив changed? - Сделать в Entity сеттеры, в которых проверяется "новое !== текущее" и заполнять некий массив changed? - Ловить изменения через события доктрины перед коммитом? иле еще как? В конечном счете мне нужно будет создать событие "изменено поле тое-то, было... стало..."
Andrey
> Сервисы - Бизнес логика, сервис ентити имеет его тип, DI репозитория и других сервисов для работы Вот это не понял
Ентити-Сервис знает как работать с привязанной к нему коллекцией ентити. Другие сервисы подключаются к нему через DI в конструкторе вместе с репозиторием. Есть независимые сервисы, которые просто реализуют бизнес логику, дергая другие сервисы
Andrey
Спасибо
Maxim Kainov
Но есть бандл https://packagist.org/packages/damienharper/doctrine-audit-bundle
Illia
Ребят, если есть шарящие по курсам: лучше "Symfony casts" или "knpuniversity"? или что-то третее типа Udemy с англ норм
Гречушников
Дак начните смотреть и сами поймете что вам интереснее