关于重构好代码的建议附代码(一)

很多时候,作为工程师最主要的工作其实不是写新代码,而是不断的维护和更新现有的代码。一般来说由于早期开发进度的要求,代码质量堪忧。在此分享和总结一下,最近Youtube看的一个Talk – Code Refactoring: Learn Code Smells And Level Up Your Game!。 Refacotring的定义是重构,简单的说就是在没有改变功能的基础上,改进代码。主讲人Sandi Metz是一个非常talented的speaker, 简洁直接重点还有趣,这是我自己听的她的第一个演讲,就看了不下三遍,墙裂建议由翻-墙-条件的前往支持 😃

问题代码问题代码

截图中的ruby代码中sale和expense是作为花费,被Far, foo, bar使用,其中的问题是什么呢?

  1. 难读 - 代码本身不够直观,total的计算需要去了解date, 也有具体的sum method.
  2. 难改 - 即使total的计算的微小变化,也期待程序员要改所有usage,出错概率大
  3. 难测 - 每一个独立的method都需要testing, 虽然逻辑相似
  4. 难加 - 未来新人大多会复制已有代码,让逻辑更复杂难处理

改进后代码

主要逻辑
在这里插入图片描述在这里插入图片描述
截图中改进后的代码又有什么样的考虑呢?

  1. 避免数据组 - 与其每次都要传startDate和endDate, 不如把他们做成一个class, 同时加入一些util method去实现常用任务如得到一周的时间范围。
  2. 抽象共享逻辑 - Ruby里的module看起来就像是interface, 把所有需要计算总价的东西,共享一个interface. 注意它这里用Dependency injection传入对应的Totable object. 这样做的好处是,一方便扩展到其他类似object, 二本身测试也可以变得很轻便,可以直接mock对应的object,避免了object内部复杂的逻辑,让测试更简单且快速。

具体总结就是学会抽象出可以复用的模块,让这些模块专注于做好一件事情。最后得到的结果会是一批易于测试和维护的代码。另外,在refactoring具体过程中,请一定要确保有测试的存在,这样在你改完的之后,你也有信心最近的更新没有破坏它原有的功能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值