DDD заявляет, что вы должны получать доступ к объектам только через свой общий корень. Так скажите, например, что у вас есть совокупный корень X, который потенциально имеет лот дочерних объектов Y. Теперь, для некоторого сценария, вы действительно заботитесь только о подмножестве этих объектов Y за один раз (возможно, вы показываете их в выгружаемом списке или что-то еще).Могу ли я иметь «неполные» агрегаты в DDD?
Возможно ли реализовать репозиторий, чтобы в таких сценариях он возвращал незавершенный агрегат? То есть. объект X, который имеет коллекцию Ys, содержит только интересующие нас экземпляры Y, а не все из них? Это может, например, вызвать методы на X, которые выполняют некоторый расчет, в котором Ys не будет вести себя так, как ожидалось.
Возможно, это признак того, что рассматриваемое сущность Y следует считать продвинутым до совокупного корня?
Моя текущая идея (в C#) заключается в том, чтобы использовать задержанное выполнение LINQ, так что мой объект X имеет IQueryable для представления его отношения с Y. Таким образом, я могу иметь прозрачную ленивую загрузку с фильтрацией ... Но заставить это работать с ORM (Linq to Sql в моем случае) может быть немного сложнее.
Любые другие умные идеи?
Это может быть запах кода, но это может быть и не так. У меня такая же проблема. У меня есть класс Trace, который содержит географические путевые точки. Теперь эта трассировка может быть произвольной долготой, и в то время как сама трассировка является сущностью, то путевые точки не являются. Это объекты ценности. Поэтому, если я хочу обновить Trace в чистом DDD-смысле, мне придется загрузить полную совокупную корневую трассировку со всеми ее путевыми точками, добавить некоторые путевые точки и снова сохранить полный трассировку. Это, очевидно, не масштабируется для больших следов. Поэтому из-за проблем с производительностью, с которыми я столкнулся, возможно, чтобы частично загружать агрегированные корни ... – 2012-05-04 09:35:38