В DDD разрешено ли свойствам коллекции сущностей иметь частичные значения? - PullRequest
1 голос
/ 11 июня 2009

В Domain Driven Design допускается, чтобы свойства коллекции сущностей имели частичные значения?

Например, должны ли свойства, такие как Customer.Orders, Post.Comments, Graph.Vertices, всегда содержать все заказы, комментарии, вершины или разрешено иметь сегодняшние заказы, последние комментарии или осиротевшие вершины?

Соответственно, если хранилища предоставляют такие методы, как

GetCustomerWithOrdersBySpecification
GetPostWithCommentsBefore

и др.?

Ответы [ 2 ]

1 голос
/ 04 ноября 2009

Помните, что доменно-управляемый дизайн также имеет концепцию сервисов . Для выполнения определенных запросов к базе данных лучше смоделировать проблему как службу, а не как коллекцию дочерних объектов, прикрепленных к родительскому объекту.

Хорошим примером этого может быть создание отчета путем принятия нескольких введенных пользователем параметров. Проще смоделировать это как:

CustomerReportService.GetOrdersByOrderDate(Customer theCustomer, Date cutoff);

Чем нравится:

myCustomer.OrdersCollection.SelectMatching(Date cutoff);

Или, другими словами, модель DDD, которую вы используете для ввода данных, не должна совпадать с моделью DDD, которую вы используете для отчетности .

В сильно масштабируемых системах принято разделять эти две проблемы.

1 голос
/ 12 июня 2009

Я не думаю, что DDD говорит вам делать или не делать это. Это сильно зависит от системы, которую вы строите, и от конкретных проблем, которые вам нужно решить.

Я даже не слышал об образцах по этому поводу.

С субъективной точки зрения я бы сказал, что сущности должны быть полными по определениям (с учетом отложенной загрузки) и могут полностью или частично загружаться в DTO для оптимизации объема данных, отправляемых клиентам. Но я не против загрузить частичные объекты из базы данных, если это решит какую-то проблему.

...