最近在学习TDD,说实话对于TDD的应用我还是抱有一定的观望态度的。我先简单介绍下TDD的过程:
- 创建一个test
- 让test可以运行
- 重构可以运行的代码
但是做为一个身陷囹圄的码农,我做的最多的是业务系统(讲的通俗一点就是CRUD)。如果我要按照TDD来开发的话,我需要经历什么呢?先写test。光是这里我就觉得很别扭了,我的目标其实很明确,就是写一个insert表的接口,表有对应的数据字段。这里接口的操作和数据模型非常简单明确,我完全可以先写接口,然后用test来验证接口。
仿佛到了这里已经偏离TDD了,TDD本身的意思是”测试驱动开发“,跟我的方式是由本质区别的。想到这里,我也就明白了,对于简单的业务系统来说,TDD可能并不是太适用。但是对于算法或者比较复杂的业务的时候,可能就比较适用了。我们的架构师在这里对我们的测试题目有了一个不错的分
析,当我们在考虑比较复杂的算法和业务的时候,我们往往不太知道自己该如何下手,仿佛要考虑的地方非常多,怎么入手感觉也不是十分合适(可能这时我们脑子里就把设计模式过了一遍)。其实这个时候就非常适合TDD了,它以最简单的方式入手,不断的是完善,最终给了我们一个不错的设计。
这里就带来一个问题,你觉得好的架构是一开始就设计出来的吗?架构师如此问我们。其实都是慢慢演化而来的,而往往这种演化而来的架构才是最经得起考验的。我们的设计也是一样,如果在一开始我们就各种考虑去应用各种设计模式,反而会过度设计带来反面效果。而如果按照TDD的方式开发,可以防止我们过度设计,我觉得这正是TDD最可贵的地方。