摘要: 这些天关于TDD的讨论很是激烈,从CoolShell上的TDD并不是看上去那么美,到InfoQ的TDD有多美,再到博客园的TDD到底美还是不美,基本上分成两派,一派说她美,一派说她不那么美。不过今天我想说的不是她美不美,而是这几天我自己反思后的一些想法。这篇CoolShell上的原文我本是没看过的,InfoQ上的这篇也没留意,完全是无意中看到Todd Wei的这篇以后才有回复的想法的,因此基本上我的回复都是基于Todd Wei的这篇文进行的讨论。 首先我回复的是一个关于测试需要修改的问题:我们的工作到底是什么?我们的工作不是写代码。我们的工作是解决问题,是通过编写软件来解决问题。就好像你准备买阅读全文
posted @ 2011-02-27 22:10 Nick Wang (懒人王) 阅读(1828) 评论(8) 编辑
摘要: 最近看了一点Domain Driven Design这本书,虽然里面对于如何使用Entity、Value Object、Repository、Factory、Aggregated、Service等模式做了大量讲解,但是不要忘了,最终的目的是ubiquitous language。目前大多数的商业软件或者是网站,核心复杂度并不在技术方面。特别是在Web 2.0、RIA、HTML5盛行的今天,可以说W...阅读全文
posted @ 2010-11-03 10:49 Nick Wang (懒人王) 阅读(641) 评论(0) 编辑
摘要: 最近又在首页看到几篇设计模式相关的学习随笔。回想起来,这几年在园子里发布的有关设计模式的随笔都有一个共同的特点。那就是Factory和Singleton居多,如果是系列的,也往往是从这两个模式开始的。由于能够坚持把《设计模式》中所有模式都写完的非常少,所以基本上也很少见到有关其它模式的随笔。这种情况也很好理解,因为《设计模式》这本书就是按照这个顺序来的。最先讲述的就是Abstract Factor...阅读全文
posted @ 2010-03-06 17:39 Nick Wang (懒人王) 阅读(4719) 评论(31) 编辑
摘要: 最近在看Refactor your wetware这本书,里面提到一种收集灵感的方法:每天早上醒来,第一件事就是拿起笔,在纸上写字,脑袋里面出什么就写什么,不要刻意的去思考,就是把脑中浮现的东西写出来,满满写上10页,并且一定要坚持。据说由于大脑还处在不太清醒的状态,可以抑制经常使用的左脑,从而更多的倾听右脑的声音。这个方法看起来真的很stupid,但是TDD看起来也很stupid,Pair Pr...阅读全文
posted @ 2010-03-05 01:55 Nick Wang (懒人王) 阅读(383) 评论(0) 编辑
摘要: 今天看了一下Cucumber和Cuke4Nuke。前者是ruby社区流行的BDD框架,它使用一种叫做Gherkin的语言来描述story和scenario,然后使用ruby来实现这些scenario。而Cuke4Nuke则可以让你用.NET上的语言(比如C#)来编写scenario的实现部分。相比于在IronRuby下直接跑cucumber,你可以用熟悉的语言(C#)来写测试,也省去了在IronR...阅读全文
posted @ 2010-03-05 01:30 Nick Wang (懒人王) 阅读(1051) 评论(0) 编辑
摘要: 是的,你没有听错,我说的确实是“慢”,但如果敏捷关注的是慢,我为什么还要用敏捷呢? 要解答这个问题,首先需要回答,为什么你需要“快”。客户需要软件,是因为要获取某些价值或者利益,而这些价值当然是越早获得越好,特别是在有竞争对手的情况下,“慢”就意味着价值的流失,甚至无法得到价值。正是因为这个原因,通常我们就会追求“...阅读全文
posted @ 2010-01-31 06:26 Nick Wang (懒人王) 阅读(405) 评论(0) 编辑
摘要: 前面已经完成了各个模块(类)的开发,是时候将之组合起来,形成可执行的程序了。首先需要一个GameEngine来驱动整个游戏的流程。[代码]GameEngine的主要作用是协调输入输出,调用Game的逻辑,驱动整个游戏运行.主程序:[代码]在SetupDependencies中,将接口与实现注册到Container当中,这样在Resolve的时候,Container就会自动寻找依赖,创建出正确的对象...阅读全文
posted @ 2009-09-23 22:58 Nick Wang (懒人王) 阅读(1454) 评论(3) 编辑
摘要: 继续我们的TDD,还是先看to-do list 随机生成答案 检查输入是否合法判断猜测结果 记录历史猜测数据并显示 判断猜测次数,如果满6次但是未猜对则判负 如果4个数字全中,则判胜实现IRandomIntGenerator 实现IGameHistory 显示猜测纪录检查输入是否合法还是测试先行[代码]还是先写功能代码让编译通过,然后运行测试,红了,接着把功能代码写完让测试变绿[代码]这里我只是...阅读全文
posted @ 2009-09-22 23:04 Nick Wang (懒人王) 阅读(1684) 评论(8) 编辑
摘要: 好的名字总是能为代码的可读性做出重大贡献,而这种贡献是通过对事物进行抽象实现的。想想一下我们平常说话时所用的语言,比如说“我家的狗跑的很快”,“家”、“狗”和“跑”都是抽象,它们分别代表了不同的含义,如果不适用这几个抽象的词汇,而是直接说它后面所代表的含义,恐怕几十句话都说不完。不信的话,你可以试试定义...阅读全文
posted @ 2009-09-17 11:35 Nick Wang (懒人王) 阅读(1419) 评论(22) 编辑
摘要: 前天在AgileChina2009上听了Fred George的演讲,他说他以前拿自己的代码给KentBeck看,结果Kent说这代码很垃圾,你去看看我写的Smalltalk best practice patterns吧。然后FredGeorge就看了这本书并且完全按照书上的要求去做,5年后当他再给Kent看自己的代码时,Kent说很漂亮的代码。考虑到Fred比Kent要老,可以看出Fred是非...阅读全文
posted @ 2009-09-15 15:14 Nick Wang (懒人王) 阅读(4858) 评论(60) 编辑