我正在寻找有关处理类实例树的更多信息,以及如何最好地从树干的叶子上调用方法。我有一个带有许多分支实例(在字典中)的树干实例,每个实例都有许多叶实例(以及分支中的字典)。叶子是动作真正发生的地方,因此叶子中有用于查询值、恢复值和许多其他事情的方法。
这会导致感觉像是代码重复,因为我可能想对分支的所有叶子做某事,所以分支中有一些方法可以对叶子、指定的一组叶子或所有已知的叶子做某事分支,尽管这些确实通过简单地循环叶子并要求它们对自己做所说的事情来减少代码重复(因此执行工作的实际代码在叶子类中的一个地方)。
然后树干进来,我可能想一口气对整棵树(即所有叶子)做点什么,所以我在那里有方法要求所有已知对象运行它们的全叶功能。我开始觉得这种方式与叶子中的实际动作完全不同,尽管它工作正常,而且代码看起来相当紧凑——非常简短、可读且运行良好。
另一个问题出现在逻辑分组中。有些数据我可能想与一些、大多数或所有叶子相关联,以表明它们是某个逻辑组的一部分,因此目前叶子本身都在存储这种数据。当我想获得一个逻辑组时,我必须扫描所有叶子并将它们收集起来,而不是在主干级别拥有某种列表。这实际上一切正常,甚至非常合乎逻辑,但感觉很疯狂。这仅仅是使用树状结构的本质,因为它们的复杂性,还是有其他方法可以做这些事情?我不喜欢建立二级结构来从相反的方向连接事物——例如,制作一个引用逻辑组中叶子的结构,然后从更像列表的方向接近它们。
我很想听听其他人在这些事情上的经历的想法——任何和所有的想法。