在下面的代码中,我试图确定业务日期应该是什么,具体取决于月初至今(mtd)指标是否为真或前2个业务日期(btd)指标是否为真。
目前,如果我想出另一个指标,那么我将不得不包括另一个if if语句。
我已经读过使这个代码更容易维护的方法是使用Factory Design模式。但是,我不确定采取哪些步骤来实现模式。
以下是代码:
0xc0c200
[INFO]: FrameworkUI
0
答案 0 :(得分:3)
工厂模式(工厂方法和抽象工厂)不能很好地适用于您的用例,因为这种模式只会强制您为每个if语句创建几个类,并且模式通常会返回一个抽象对象到你的客户端代码消费(不是你的情况,因为你要返回一个简单的字符串)。
您也不能使用简单工厂(这不是设计模式),因为只会将条件逻辑移动到单个类中,因此您的代码设计不会改进。
你应该不使用设计模式只是增加代码的复杂性而没有灵活性的好处。
对于您的用例,我只需使用一行代码将其保留为if / else语句。
return mtdIndicator ? Helper.FOMBusDt :
prev2BusDtInd ? Helper.Previous2BusinessDate :
Helper.PreviousBusinessDate;
如果你想用多态替换条件,你应该尝试:
......或其他模式(取决于整体架构)
此外,您可以通过“告诉不要问”来避免ifs。
isStateXOk():Boolean
这样的函数来实现)提示:不要通过创建3到10个类来避免短if / else语句,通过为每个案例分支创建类来避免切换。