我正在处理的问题中有以下类的层次结构。
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);
}
...
}
...
类似的添加方法一直到叶类。你能想出任何简化这种分层类结构的方法吗?
答案 0 :(得分:0)
大多数现代ORM可以为您解决此问题。
你实际上无法简化你的“等级”,因为它基于现实生活中的抽象,但你可以简化你的生活,消除手工儿童的人口。
在这种情况下,您仍然需要所有子集合(因为这是域逻辑或数据访问层的一部分),但所有这些复杂性(填充它们)都会被ORB实现隐藏。
答案 1 :(得分:0)
一个想法是使用Serializer Pattern的形式......因为你是从数据库'反序列化'。
也就是说,您可能有一个传递数据库连接的DiscountEventReader
类 - 它可能会调用其他读者类来创建包含的对象实例。
这样做的好处是,例如,ProductFamilyReader可以读取(并可能缓存)多个数据库行,将多个Product
实例添加到父容器,而不遍历每个新的“addProduct”调用的整个层次结构对象