Вот мои уроки:
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 / Что-то еще, о чем я даже не думал :)
Спасибо