如何简化分层类结构,从而产生链式方法调用?

时间:2010-09-29 00:20:10

标签: design-patterns oop hierarchical-data

我正在处理的问题中有以下类的层次结构。

DiscountEvent
  DiscountGroup
    ProductFamily
      Product

其中每个类包含下一个类的集合(例如,DiscountEvent包含一组DiscountGroups等)

这种有点深层次的层次结构导致来自更高模块的许多链式调用。 例如,在将数据库中的产品数据读入此类层次结构时,我有调用链和类似的AddProduct方法。

class DiscountEvent{
  Dictionary<int, DiscountGroup> DiscountGroups;
  public void AddProduct(ProductInfo info){
    DiscountGroups[info.groupId].AddProduct(info);
  }
  ...
}
class DiscountGroup{
  Dictionary<int, productFamily> productFamilies;
  public void AddProduct(ProductInfo info){
    productFamilies[info.familyId].AddProduct(info);
  }
  ...
}
...

类似的添加方法一直到叶类。你能想出任何简化这种分层类结构的方法吗?

2 个答案:

答案 0 :(得分:0)

大多数现代ORM可以为您解决此问题。

你实际上无法简化你的“等级”,因为它基于现实生活中的抽象,但你可以简化你的生活,消除手工儿童的人口。

在这种情况下,您仍然需要所有子集合(因为这是域逻辑或数据访问层的一部分),但所有这些复杂性(填充它们)都会被ORB实现隐藏。

答案 1 :(得分:0)

一个想法是使用Serializer Pattern的形式......因为你是从数据库'反序列化'。

也就是说,您可能有一个传递数据库连接的DiscountEventReader类 - 它可能会调用其他读者类来创建包含的对象实例。

这样做的好处是,例如,ProductFamilyReader可以读取(并可能缓存)多个数据库行,将多个Product实例添加到父容器,而不遍历每个新的“addProduct”调用的整个层次结构对象