【发布时间】:2019-05-20 15:24:37
【问题描述】:
我想在python中实现一个业务逻辑,其中经常发生变化。更新这个业务逻辑应该很容易,并且应该保留旧的逻辑。
我目前的想法是这样的:
class Item():
def __init__(self):
pass
def __call__(self, company, time):
if time < "2017Q1":
return self.calc_base(company, time)
elif time < "2018Q2":
return self.calc_after2017Q1
else:
return self.calc_after2018Q2
def calc_base(self, company, time):
return income(company, time) + costs(company, time)
@time_after("2017Q1")
def calc_after2017Q1(self, company, time):
intermediate = self.calc_base(company, time)
return max(intermediate, 100_000) #Haircutt due to article xxx
@time_after("2018Q2")
def calc_after2018Q2(self, company, time):
intermediate = self.calc_after2017Q1(company, time)
intermediate -= 20_000 #Correction due to xxx
这个想法是用公司和时间作为参数调用这个类的一个实例。在内部,该类将查看该时间将使用哪个业务逻辑,并将其路由到正确的计算函数。每当逻辑发生变化时,只需添加一个新函数并记录它与以前的计算有何不同。
这个实现需要对 self.call 函数中的 if .. elif .. else 进行一些处理。谁能想到一种自动化的pythonic和智能方式?我在考虑装饰器的思路(如本示例中所述,但未实现),我可以在其中指定新逻辑从哪个时间开始有效,直到下一个逻辑取代它。
最后,我觉得我在这里重新发明了轮子,因为这可能是一个非常标准的问题。但不知何故,我似乎缺乏正确的词汇来在这个方向上找到好的结果。因此,我也希望能得到正确方向的提示。
【问题讨论】:
标签: python business-rules