数据处理管道与代码架构
我现在正在做博士研究,研究一个Python包,这个包可以从数据中提取多个特征。每个特征可以看作是一系列数学操作的流程,这些操作可以接受一些参数。这些操作的结果会被不同的特征使用,我想避免重复计算(目前这不是问题,但将来我需要处理大量数据时就会成为问题)。有没有办法组织我的代码,让这些共享的操作只计算一次呢?
这里有个例子:
在这个例子中,操作1(参数=值1)只需要计算一次,结果会在不同的流程中使用,最终得到3个不同的特征。此外,在这个例子中,操作3隐含地需要操作2的结果。
目前,我的解决方案是让所有操作都继承自一个叫做PipelineElement
的类,这个类有一个parent
属性和一个children
属性。这样我就可以创建一个操作树,只计算一次。这样做对吗?这种模式常用吗?如果常用,我可以在哪里学习一些好的实践呢?
1 个回答
0
你的解决方案看起来像是“策略模式”、“组合模式”或者“访问者模式”这几种设计模式的结合,这些模式在《设计模式:可复用面向对象软件的基础》这本书中有详细介绍。这本书虽然出版很久了,但现在依然很有用。书的作者是埃里希·伽玛、理查德·赫尔姆、拉尔夫·约翰逊和约翰·弗利西德斯,出版于1994年。
你可以在这里找到这些模式的简要介绍: