02|TDD演示(2):识别坏味道与代码重构

2022-03-16 徐昊
《徐昊·TDD 项目实战 70 讲》
课程介绍


讲述:徐昊

时长:大小4.79M


你好,我是徐昊。今天我们来继续进行命令行参数解析的 TDD 演示。
首先让我们回顾一下题目与需求与代码进度。如前所述,题目源自 Bob 大叔的 Clean Code 第十四章:
我们中的大多数人都不得不时不时地解析一下命令行参数。如果我们没有一个方便的工具,那么我们就简单地处理一下传入 main 函数的字符串数组。有很多开源工具可以完成这个任务,但它们可能并不能完全满足我们的要求。所以我们再写一个吧。
 
传递给程序的参数由标志和值组成。标志应该是一个字符,前面有一个减号。每个标志都应该有零个或多个与之相关的值。例如:
 
-l -p 8080 -d /usr/logs
 
“l”(日志)没有相关的值,它是一个布尔标志,如果存在则为 true,不存在则为 false。“p”(端口)有一个整数值,“d”(目录)有一个字符串值。标志后面如果存在多个值,则该标志表示一...

展开全文
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。

精选留言

  • 🐑
    置顶
    2022-03-22
    大家好~我是TDD这门课的编辑辰洋~ 🎐我来友情提示一下下~ 01-04是视频演示,好对TDD有个感性的认识。 05-10是对演示的复盘,同时也会讲解TDD的相关知识点。比如测试的基本结构,TDD中的测试是啥~ 所以,如果你在01-04的操作卡壳了,可以从05开始学,看看5-10,这才是重点哇。看完再回头去看01-04~
    展开
    
    2
  • aoe
    置顶
    2022-03-22
    1. 跟着徐老师学习了Idea重构的强大功能 2. 本课学习笔记 https://www.wyyl1.com/post/19/02/ 3. 源码 https://github.com/wyyl1/geektime-tdd/tree/branch-02/ 4. 笔记摘要 优化思路 不同的实现提取出接口 实现接口 if else 分支使用接口替换 构造函数转工厂方法(因为工厂方法可以 inLine,构造函数不行) 尽可能使用接口 inLine 精简代码(不用跳转到方法看具体实现) 消除多余代码 代码和老师不一样的地方 区别:提前抽取了公共变量 String flag = “-” + option.value(); 理由: DRY 原则 此时徐昊老师的代码里有多处重复 感觉出现问题: 我的命名比较糟糕:SingleValueOptionParser 类中 parse(List arguments, String flag),参数和 Option 无关 因为将 Option 转换成了 String,后续多参数解析,可能会出问题
    展开
    
    
  • 阿崔cxr
    置顶
    2022-03-19
    交一下第一章和第二章的作业 环境: nodejs 语言: typescript 暂时先把 happy path 搞定了 https://github.com/cuixiaorui/args
    展开

    作者回复: nice

    
    
  • 阿崔cxr
    2022-03-16
    哈哈哈 ,最后一个使用 java 来做重构真的感觉比 ts 或者 js 笨重太多了。 如果使用 js 或者 ts 的话,直接抽取出一个函数来处理 parseValue 就好了 最后就是 3个处理不同类型的 fn, 外加一个抽离出来处理 string 和 int 的 value 的 fn
    展开
    
    3
  • 邓志国
    2022-03-16
    如果先消除重复,过程上应该是先提取方法。然后再switch转为多态就直接出来2个类而不是3个。
    
    2
  • webmin
    2022-03-22
    先实现再优化,就好像同一时间只能带一顶着帽子出门一样,耐心按着步聚来,快与慢是相对的,一开始慢,之后才可以越来越快。 之前一直觉得Idea的重构功能太少,看了演示才知道其实是自己不会用,回想一下Idea怎么说也是经过全世界的千锤百炼,其中的重构功能是经过凝练的,这也从一个侧面反应出自己对重构的认知太过表面,功能通过组合可以适用很多场景。

    作者回复: 重构不需要太花哨的功能 有四五个就够用

    
    
  • 宁
    2022-03-21
    Test-driven development is a way of managing fear during programming. —Kent Beck
    
    
  • Quintos
    2022-03-20
    个人 C# 版练习提交地址: https://github.com/dengyakui/GeekTDD/blob/master/GeekTDD/ArgsTest.cs

    作者回复: good

    
    
  • 百炼钢
    2022-03-20
    Refactor > Replace Constructor with Factory Method... ,这个只有正版IDEA才有此功能吧?

    作者回复: 在构造函数上按 就有了

    共 4 条评论
    