На сколько я понял, DDD это очень сложна штука, потому что я вообще ничего про нее не понял =).vova07 писал(а):Давно не было интересных тем на этом форуме, так что если позволите поделюсь мнением и пообщаюсь чуток с вами тут.
Гист прочитал только то что описал автор, тему эту прочитал бегло, ибо много текста.
От себя осмелюсь подправить автора и тех кто называют данный паттерн "Repository", это не так. Это как раз сервисных патерн в своей самой простой реализации с элементами репозитория.
"Repository" патерн подразумевает взаимодействие "Repository" класса с "Persistence" (хранилищем). В идеале он должен использоваться только как мост между "Aplication Layer" и хранилищем. Но не содержать избыточной логики как валидация например, или внешние функции которые используются в контролерах. Это как раз дело сервиса.
Конечно это идеальный вариант и учитывая это можно забить и согласится что описанное является "репозиторием", но наверное это больше похоже на недоделанную комбинацию между Сервисом и Репозиторием, который в идеале должен превратится в "Command" с зависимостью от "Repository".
Уверен что вам надоело моя болтовня, но по теме могу еще добавить следующее:
- При крупных проектах очень удобно разделять приложения на слои
- Лучше всего всегда использовать Repository патерн
- Лучше всего комбинировать это все с "Command" патерном и "CommandBus" классом.
- В идеале использовать для общения между слоями DTO
- Конечно если речь идет о крупных проектах то без Entity и ValueObjects (VO) мы не сможем жить.
- И конечно не забываем про "Identity Map" патерн который обязательно по моему мнению должен присутствовать в "Repository" классе.
- Ну и конечно не забываем про Exception и Marker Interface для наших собственных исключений для хорошего тона.
- Если уже дошли до радикальных мер, то не бойтесь выносить Инфрастуктуру отдельно и используйте Core Domain и чуток вашего кода для хорошего результата.
- Ну и конечно не бойтесь усложнять чуток логику, в будущем это спасет ваш проект. DDD придумали умные люди которые решали сложные задачи, не думайте что эти пару тройку классов и папок усложнят жизнь, они как раз сделают противоположное.
П.С: Почему я это написал? Просто хочется чтобы и на Уии люди писали грамотно, а то фреймворк то вроде хороший, а пишут не нем все как школники.
Нам бы тут хотябы с S.O.L.I.D разобраться. Тоесть все что я понял про DDD, этот подход объединяет в себе множество подходов, такие как S.O.L.I.D, TDD, BDD и тп. По мне это пока слишком круто и слишком для крутого проекта, который выходит за рамки 1 - 2 технологий.