0

这是我的课程:

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/ 总是加载它:我不喜欢它,因为如果我将这个逻辑应用于所有内容,我最终会加载整个数据库。

3 /删除组合(即成员priceScales),在这种情况下,处理价格比例的最佳方法是什么:

  • 得到一个 Dictionnary<int,List<PriceScales>> 其中的关键是产品 id ?

  • 别的东西?

4/ 在我需要 priceScales 的方法的开头添加

checkPriceScalesAreLoaded(productList);

它看起来像延迟加载,但它更明确。

5/ 其他一些我什至没有想到的事情 :)

谢谢

4

2 回答 2

0

对我来说,这听起来像是一个持久性问题,与 OOP 或组合不太相关。

你是从数据库加载你的对象吗?如果是这样,您使用的是什么语言和持久性机制?这对可能的解决方案有很大影响。

例如对于 Java 和 Hibernate,推荐的方法是使用默认的惰性获取策略,然后酌情测量性能和微调(选择性地在本地切换获取策略)。您可以在单个映射/属性/查询上切换到渴望获取或批处理/连接查询,同时在其余部分保持惰性获取策略。

于 2010-09-03T09:41:36.413 回答
0

我决定像这里一样进行多个结果集查询

http://vb.net-informations.com/ado.net-dataproviders/ado.net-multiple-result-sets.htm

于 2011-12-15T11:05:14.153 回答