Как загрузить данные с составом класса? - PullRequest
0 голосов
/ 03 сентября 2010

Вот мои уроки:

class PriceScale
-int ID
-float bookingFees
-Product product
-List<PricePeriod> periods

Class Product
-int ID
-string name
-List<PriceScale> priceScales

class PricePeriod
-DateTime begin
-DateTime end
-float price
-PriceScale scale

Как видите, я строго придерживался бизнес-правил «У продукта столько же шкал цен, а у шкалы цен много периодов».

Мойпроблема: например, когда я имею дело с классом Product, я не люблю задавать себе вопрос "Загружен ли priceScales?"(потому что я не буду загружать его каждый раз, когда мне нужен продукт)

Решение:

1 / Ленивая загрузка: мне это не нравится, потому что вы запускаете SQL-запрос, даже не зная об этоми вы можете столкнуться с проблемой запроса 1 + n (я работаю над системой вычисления цены, поэтому мне действительно нужно быть уверенным в том, какой SQL-запрос выполняется)

2 / всегда загружать его: Iмне это не нравится, потому что если я буду применять эту логику ко всему, я в конечном итоге загрузлю всю базу данных.

3 / Удалите композицию (т. е. член priceScales), в таком случае, как лучшеиметь дело с ценовой шкалой:

  • получить словарьгде ключ - это идентификатор продукта?

  • что-то еще?

4 / Добавить в начале моего метода, где мне нужно priceScales

checkPriceScalesAreLoaded(productList);

Это выглядит как ленивая загрузка, но это более явно.

5 / Что-то еще, о чем я даже не думал :)

Спасибо

Ответы [ 2 ]

0 голосов
/ 15 декабря 2011

Я решил сделать несколько запросов набора результатов, как здесь

http://vb.net -informations.com / ADO.NET-dataproviders / ado.net-множественный результат-sets.htm

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

Для меня это звучит как проблема постоянства, не совсем связанная с ООП или композицией.

Вы загружаете свои объекты из БД? Если да, то какой язык и механизм персистентности вы используете? Это сильно влияет на возможные решения.

Например, для Java и Hibernate рекомендуется использовать стратегию отложенной выборки по умолчанию, а затем измерять производительность и точную настройку (выборочное переключение стратегии выборки локально) в зависимости от ситуации. Вы можете переключиться на активную выборку или пакетные / объединенные запросы для отдельных сопоставлений / свойств / запросов, сохраняя при этом ленивую стратегию выборки.

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