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

2021-04-01 22:31:11 +08:00
 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 分钟卖出
6388 次点击
所在节点    Python
35 条回复
DTCPSS
2021-04-01 22:36:37 +08:00
表驱动?
turan12
2021-04-01 22:43:39 +08:00
这是量化交易系统的条件判断?
abersheeran
2021-04-01 22:46:07 +08:00
任何形式都不能去除最基本的 if else 判断。你只能隐藏它们。
xx6412223
2021-04-01 22:46:22 +08:00
没记错的话,应该是责任链模式,
mmdsun
2021-04-01 22:50:40 +08:00
适合用规则引擎做?
skymei
2021-04-01 22:52:05 +08:00
责任链模式或者策略模式
yagamil
2021-04-01 22:54:04 +08:00
@turan12 是的,用户就是提出这样的需求。后期也可能回新增条件。
yagamil
2021-04-01 23:03:05 +08:00
@abersheeran 是的,尽量避免嵌套大约 3 层的 if else,加上后期维护。
cmdOptionKana
2021-04-02 00:26:10 +08:00
感觉这种没有规律且不受控制的(客户随时提出改动的)条件,用 if else 写死就很好,反正一共也没几行。

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

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

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

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

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

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

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

© 2021 V2EX