需求里充斥着大量条件判断,有什么好的设计模式,便于后期维护的? 之前记得重构那本书里面是每个判断写成一个类

2021 年 4 月 1 日
 yagamil

需求里面这样的,这些变量是由用户填写的,所以也不能根据自己的想法吧冗余的合并了,而且用户自己填错没有执行到判断,这个是用户自身问题,也不做提示。

不同的字母代表不同的值,当然可以设置为一样的
T1 分钟内涨幅≥A1 且 起始涨幅> B1 则买入后 S1 分钟卖出,
T2 分钟内涨幅≥A2 且 起始涨幅< B2 则买入后 S2 分钟卖出,
T3 分钟内跌幅≥A3 且 起始涨幅> B3 则买入后 S3 分钟卖出,
T4 分钟内跌幅≥A4 且 起始涨幅< B4 则买入后 S4 分钟卖出,

T5 分钟内 C5≤涨幅< A5,且 起始涨幅< D5,则买入后 S5 分钟卖出
T6 分钟内 C6≤涨幅< A6,且 起始涨幅> D6,则买入后 S6 分钟卖出
T7 分钟内 C7≤跌幅< A7,且 起始涨幅> D7,则买入后 S7 分钟卖出
T8 分钟内 C8≤跌幅< A8,且 起始涨幅< D8,则买入后 S8 分钟卖出
7134 次点击
所在节点    Python
35 条回复
DTCPSS
2021 年 4 月 1 日
表驱动?
turan12
2021 年 4 月 1 日
这是量化交易系统的条件判断?
abersheeran
2021 年 4 月 1 日
任何形式都不能去除最基本的 if else 判断。你只能隐藏它们。
xx6412223
2021 年 4 月 1 日
没记错的话,应该是责任链模式,
mmdsun
2021 年 4 月 1 日
适合用规则引擎做?
skymei
2021 年 4 月 1 日
责任链模式或者策略模式
yagamil
2021 年 4 月 1 日
@turan12 是的,用户就是提出这样的需求。后期也可能回新增条件。
yagamil
2021 年 4 月 1 日
@abersheeran 是的,尽量避免嵌套大约 3 层的 if else,加上后期维护。
cmdOptionKana
2021 年 4 月 2 日
感觉这种没有规律且不受控制的(客户随时提出改动的)条件,用 if else 写死就很好,反正一共也没几行。

当客户提出的情况越来越复杂,多数情况下都可以进行分类处理,但每个类别里面基本上也是写死几种特殊情况。
andj4cn
2021 年 4 月 2 日
pipeline
billlee
2021 年 4 月 2 日
如果是需要由运营人员随时改动的,还是适合做成规则引擎配置化

如果钱给得不够做不了规则引擎,那还是 if ... else 吧,更好维护。这种需求搞一堆类才是无法维护的。
akira
2021 年 4 月 2 日
这其实就只有 2 个规则呀
bugmakerxs
2021 年 4 月 2 日
责任链
GeruzoniAnsasu
2021 年 4 月 2 日
啊? 规则是使用者定义的,你为什么想要 build in 到系统里?

难到不是应该实现一个 parser 然后就把你展示的这段文本作为配置输入吗
laike9m
2021 年 4 月 2 日
没懂为什么需要设计模式
turan12
2021 年 4 月 2 日
@yagamil 以前碰到过一个决策树系统,和这个很类似,在使用过程中这些条件肯定是需要频繁修改的。当时的做法是直接把条件语句写入数据库,并指定执行优先级。需要时直接 order by 以后读取执行即可。
Mithril
2021 年 4 月 2 日
做成规则引擎,而且你这就是简单的 if else,很好做。弄个 JSON 配置文件直接读进来当表判断就行了。
然后剩下的都是 PM 和策划的活了。反正它们自己写的配置搞成死循环了也不关你的事。
xinhaiw
2021 年 4 月 2 日
反射
gouflv
2021 年 4 月 2 日
如果只是这几种情况,做可视化都可以了
JJstyle
2021 年 4 月 2 日
写成配置,然后反解析

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/767367

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX