理解HTTP幂等性

摘要:在数学中,幂等性是指N次变换与1次变换的结果相同。本文介绍了:1.分布式系统中幂等性的概念;2.用幂等设计代替分布式事务的方法;3.HTTP主要方法的语义和幂等性。 阅读全文
posted @ 2011-06-04 20:51 Todd Wei 阅读(161855) 评论(75) 推荐(160) 编辑

软件需求的薛定谔之猫

摘要:薛定谔的猫(Erwin Schrodinger's Cat)是奥地利物理学家埃尔温·薛定谔试图证明量子力学在宏观条件下的不完备性而提出的一个思想实验。实验内容如下:“把一只猫放进一个封闭的盒子里,然后把这个盒子连接到一个包含一个放射性原子核和一个装有有毒气体的容器的实验装置。设想这个放射性原子核在一个小时内有50%的可能性发生衰变。如果发生衰变,它将会发射出一个粒子,而发射出的这个粒子将会触发这个实验装置,打开装有毒气的容器,从而杀死这只猫。根据量子力学,未进行观察时,这个原子核处于已衰变和未衰变的叠加态,但是,如果在一个小时后把盒子打开,实验者只能看到“衰变的原子核和死猫” 阅读全文
posted @ 2011-03-01 15:05 Todd Wei 阅读(4179) 评论(10) 推荐(9) 编辑

TDD到底美不美?

摘要:最近CoolShell上的一篇《TDD并不是看上去的那么美》引起了敏捷社区的高度关注和激励辩论。今天,InfoQ甚至专门举行了一个“虚拟座谈会”《TDD有多美?》,几位国内敏捷社区的名人专门就此问题展开了深入地讨论。不论结果如何,这种探讨和反思的精神还是非常值得赞赏的。事件实际上可以简单地归纳为“一个有一定影响力的开发人员质疑TDD,一群敏捷社区名人对TDD进行解释和辩护”。现在,就让我坚定地站在CoolShell一边,为对TDD的质疑和批判添砖加瓦吧!我们首先来看看TDD的核心理念是什... 阅读全文
posted @ 2011-02-23 22:42 Todd Wei 阅读(8750) 评论(57) 推荐(6) 编辑

聊聊结对编程

摘要:在敏捷软件开发的各种实践中,结对编程(Pair Programming,下文简称Pair)是特别有争议的。Pair有一个特点,那就是还没有进行过任何Pair实践前,你很可能对它已经有了“喜欢”或者是“讨厌”的印象。如果有人问你,你喜欢持续集成吗?你多半会回答:不是很肯定,需要试试看。但如果有人问你,你喜欢Pair吗?我猜你会马上给予明确的肯定或否定的回答。喜欢它的人会觉得好处多多而成本低低,不喜欢它的人会觉得讨厌得难以想象。喜欢与不喜欢都可以形成强大的阵营,两边都不乏重量级的高手。Pair的优点说起来都很明显,比如:快速反馈,更好的设计,甚至更高 阅读全文
posted @ 2011-02-20 17:31 Todd Wei 阅读(5483) 评论(14) 推荐(8) 编辑

boost::mutex vs boost::recursive_mutex

摘要:boost::mutex is not re-entrant, a thread can only lock it once, otherwise it’s dead-locked. If you need re-entrant mutex, the boost::recursive_mutex is the choice. 阅读全文
posted @ 2010-12-25 16:53 Todd Wei 阅读(4538) 评论(0) 推荐(0) 编辑

用dynamic增强C#泛型表达力

摘要:由于C#采用基于reification的泛型机制,泛型类会单独编译,并且在运行时存在;因此,C#对于泛型参数的要求更加严格,只能通过where关键字表达基于继承关系的约束,无法通过duck typing的方式表达类型约束。本文介绍了一种基于动态duck typing机制的泛型参数约束方法,增强了C#的泛型表达能力。 阅读全文
posted @ 2010-11-21 11:30 Todd Wei 阅读(5792) 评论(7) 推荐(3) 编辑

TDD的核心:Specification by Example

摘要:Martin Fowler这篇文章点出了TDD的核心理念:Specification by Example,即测试用例(Test Case)是一种通过例子(Example)来表达需求的规范(Specification)形式。传统的需求规范一般是通用的,覆盖所有场景的,比:自然语言描述的文档;而TDD则用把测试用例作为主要的需求规范形式。由于测试用例不具备通用性(general),所以它不能作为唯一的规范形式,但这也不妨碍它成为一种主要的形式。与文档相比,测试用例更加精确(Precise),更易于获得反馈(Quick Feedback),更贴近真实用户(User Friendly),更加稳定(Stable)。 阅读全文
posted @ 2010-11-11 11:04 Todd Wei 阅读(2243) 评论(2) 推荐(2) 编辑

闭包和对象的关系

摘要:本文探讨了闭包(Closure)的概念与应用,比较了闭包形式与class形式的异同,并提出了在C#3.0中通过闭包创建对象的闭包工厂模式(Closure Factory Pattern)。 阅读全文
posted @ 2010-11-01 08:56 Todd Wei 阅读(4927) 评论(13) 推荐(4) 编辑

谈单元测试的状态验证和行为验证

摘要:单元测试本身并不严格限制过程式还是OOP,白盒还是黑盒,因而测试用例的写法具有很大的随意性。单元测试用例的编写可以直接反映一个程序员是否真正理解了什么是过程式编程,什么是OOP。本文介绍了单元测试中状态验证和行为验证两种不同的方式,并分析其背后的过程式思想和OOP思想。 阅读全文
posted @ 2010-10-27 16:39 Todd Wei 阅读(2864) 评论(10) 推荐(3) 编辑

系统的层次性与单一职责原则

摘要:职责层次性的背后是需求层次性,那么需求层次性又是哪里来的呢?需求层次性来源于设计!对于汽车的用户来讲,他的需求是汽车整体这个层次的,至于汽车部件的设计则不属于他所关心的范畴。而发动机、轮胎等需求来源于汽车设计者对汽车结构的设计,这就是说为满足高层系统需求所进行的设计产生了子系统的需求,而子系统的需求又进一步产生了子子系统的设计,呈现出了设计层次性。需求=>设计=>需求=>设计…,需求和设计就像鸡生蛋,蛋生鸡一样层层地细化,我们称这种设计方式为职责驱动设计。 阅读全文
posted @ 2010-09-11 14:27 Todd Wei 阅读(2823) 评论(13) 推荐(6) 编辑

统计