Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Что-то меня напрягает параметр DbContext в AddReview.
Разве агрегаты не должны быть загружены полностью, прежде чем начать свою работу? Если там коллекция действительно такая большая, то возможно стоило по другому спроектировать агрегаты?
На крайний случай, можно было бы и lazy-loading заюзать.
Тем более, что EF Core с версии 2.1 позволяет задавать собственные «Value conversions» для таких объектов. Но тут есть некоторые ограничения, главное из которых — если такой ValueObject попадает в expression tree, например — .Where(), то в этом случае из БД загрузяться все обьекты и только потом отфильтруются. Но это можно легко обойти. NHibernate в этом плане гораздо лучше подходит для DDD.
Так же совсем не обязательно сеттеры для всех свойств Entity делать приватными. Если бизнес-правила допускают, что свойство может просто изменяться без каких либо других ограничений, то какой смысл делать сеттер приватным при использовании ValueObject?
Book.UpdatePubDate(date), а не UpdateBook(ChangePubDateDto dto).А если для инициализации агрегата потребуется over 20 параметров. Делать конструктор с кучей параметров?
И что делать если логика должна предполагать как полную так и частичную инициализацию агрегата?
Значит это какой-то неправильный агрегат
Сущности в DDD-стиле с Entity Framework Core