14. 冗赘的元素(Lazy Element)内联函数、内联类、折叠继承体系。
15. 夸夸其谈通用性(Speculative Generality)折叠继承体系、内联函数、内联类、改变函数声明。如果
函数或类的唯一用户是测试用例,这就飘出了坏味道“夸夸其谈通用性”。移除死代码。
16. 临时字段(Temporary Field)提炼类、搬移函数、引入特例。
17. 过长的消息链(Message Chains)不同对象依次引用对方,隐藏委托关系、提炼函数、搬移函数。
18. 中间人(Middle Man)过度委托。移除中间人,内联函数,以委托取代超类,以委托取代子类。
19. 内幕交易(Insider Trading) 搬移函数、搬移字段、隐藏委托关系、以委托取代子类、以委托取代超
类。
20. 过大的类(Large Class)提炼类、提炼超类、以子类取代类型码、提炼类、提炼超类、以子类取代
类型码。
21. 异曲同工的类(Alternative Classes with DifferentInterfaces)改变函数声明、搬移函数、提炼超类。
22. 纯数据类(Data Class)封装记录、移除设值函数、搬移函数、提炼函数。
23. 被拒绝的遗赠(Refused Bequest)函数下移、字段下移、以委托取代子类、以委托取代超类。
24. 注释(Comments)提炼函数、改变函数声明、引入断言
接下来,先找我代码里的“坏味道”吧,以system.py为例。
1. 神秘命名
变量名
81行 cash0 => cash_init
90-91行 td, tp => hold_days, trade_profit
115行 bd => buy_days
252行 retrate => profit_rate
253行 ret => returns
260行 bench
函数名
127行 def test => backtest
317行 def riskAnaly => risk_analyse
370行 def draw => drawing_process
重构方法:
变量改名(Rename Variable)
改变函数声明(Change Function Declaration)
函数名,变量名等用小写加_。类名首字母大写,驼峰命名法。全局变量全部大写。
2. 过长函数(Long Function)
main()函数和backtest()函数,尤其后者。
重构方法
提炼函数,查询取代临时变量,引入参数对象,保持对象完整,以命令取代函数,分解条件表达式,
以多态取代条件表达式,拆分循环。
提炼函数
“将意图与实现分开”:如果你需要花时间浏览一段代码才能弄清它到底在干什么,那么就应该将其提
评论0
最新资源