Совокупный шаблон и проблемы с производительностью - PullRequest
3 голосов
/ 28 марта 2010

Я читал об Совокупном паттерне, но я что-то здесь смущен. В паттерне говорится, что доступ ко всем объектам, принадлежащим совокупности, должен осуществляться через корень совокупности, а не напрямую.

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

Но я думаю, что это добавляет заметные накладные расходы к приложению. Например, в типичном веб-приложении, что если я хочу получить объект, принадлежащий агрегату (который НЕ является корнем агрегата)? Мне нужно будет вызвать Repository.GetAggregateRootObject (), который загружает совокупный корень и все его дочерние объекты, а затем перебрать дочерние объекты, чтобы найти тот, который я ищу. Другими словами, я загружаю много данных и выбрасываю их, кроме конкретного объекта, который ищу.

Есть ли что-то, что я здесь упускаю?

PS: Я знаю, что некоторые из вас могут предложить улучшить производительность с помощью Lazy Loading. Но это не то, что я здесь спрашиваю ... Шаблон агрегации требует, чтобы все объекты, принадлежащие агрегату, были загружены вместе, чтобы мы могли применять бизнес-правила.

1 Ответ

0 голосов
/ 18 сентября 2010

Я не уверен, где вы читаете об этом "Совокупном паттерне". Пожалуйста, оставьте ссылку.

Единственное, что может быть, это когда мы инкапсулируем список в другой объект. Для простого примера, если у нас есть корзина покупок, а не список покупок, мы используем объект корзины. Затем код, который работает на всю корзину (например, получение общих расходов), может быть инкапсулирован в корзину. Я не уверен, что это действительно шаблон, но Google нашел эту ссылку: http://perldesignpatterns.com/?AggregatePattern

Подозреваю, когда вы говорите

"Агрегированный шаблон требует, чтобы все объекты, принадлежащие совокупности быть загружены вместе, чтобы мы могли обеспечить соблюдение бизнес правила. «* * 1009

это зависит от ваших бизнес-правил.

Обычно шаблоны не следует рассматривать как набор правил, которым вы должны следовать во всем. Как разработчик, вы должны понять, где их можно эффективно использовать.

В нашем примере с корзиной мы обычно хотим работать со всей корзиной сразу. У нас могут быть бизнес-правила, согласно которым наши клиенты могут заказать только ограниченное количество товаров - или, возможно, они получают скидку на заказ нескольких товаров. Так что имеет смысл прочитать все это.

Если вы берете другой пример, например. товары. У вас все еще может быть хранилище продуктов, но вам не нужно загружать их все сразу. Вы, вероятно, когда-либо хотите только страницу продуктов одновременно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...