adelf / acwa_book_ru

Книга "Архитектура сложных веб-приложений. С примерами на Laravel"
1.67k stars 225 forks source link

Структура проекта #32

Open Cepairda opened 3 years ago

Cepairda commented 3 years ago

Книга замечательная. Спасибо огромное ! После прочтения у меня остался вопрос. Как правильно создать структуру. В какую директорию сохранять Domain слой. Куда сохранить DTO(В одну директорию все или на поддиректории), и прочее. Очень хотелось бы увидеть пособие/пример. Если бы к книге был хоть манюсенький пример проекта(ссылка на github или даже платный вариант. Было бы здорово.). Пример в таком ввиде: -DomainLayer -DTO --User --Setting

adelf commented 3 years ago

Нет правильной структуры. В начале проекта, всё как в фреймворке - контроллеры там то, ДТОшки там то. ПОтом если проект растёт, то становится более удобно поделить по фиче-модулям. И каждый модуль всё своё держит в себе(и контроллеры и модельки и всё). Иногда отделяют домен прям совсем-совсем. Во всяких си-шарп проектах это удобно очень в отдельный проект-сборку(*.dll). А иногда вообще по микросервисам делят. Это не так уж и важно что где лежит. Главное, чтобы был хоть какой-то порядок в этом. Регламентированный.

Cepairda commented 3 years ago

@adelf Ну как я понимаю в DDD подходе есть сложившиеся рекомендации. Инфраструктура, Сервисы, Домен и т.к.

adelf commented 3 years ago

Да. Как и в книге этой, это назвал слоями. Т.е. фактически они отделены друг от друга. но это разделение логическое. Некоторые держат каждый слой в своей папке. А некоторые берут и всё-всё, что касается например юзеров, все репозитории, сервисы, модели и т.д. в одну папку кладут и им так лучше. Поэтому главное тут понять для себя как удобнее на данном конкретном проекте. НУ и вообще я где-то видел довольно популярный слайд, что DDD это не про "репозитории и папочки". это про Ubiquitous language and Bounded Contexts

Cepairda commented 3 years ago

@adelf Спасибо !Насколько это хороший пример для DDD https://github.com/shin1x1/laravel-ddd-sample ? Мне понравилось что там отдельная сущность Item и при выборке с БД всё записывается в этот обьект. А не понравилось что нет обратной операции. То есть запись идёт напрямую в eloquent в ввиду строк, а вот выборка уже возвращает обьект