My Avatar

袁英杰

程序员,技术咨询师。持续关注与软件开发效率有关的方方面面。

正交设计原则与SOLID

2016年06月21日 星期二

正交设计,是普遍的设计原则,与粒度无关,与编程范式无关,更与具体的实现语言无关。(虽然确实在不同的编程范式下,或使用不同的编程语言时,具体的解决方法或难易程度不同,这也正是为何我们总是在寻找更适合的编程范式,更高效的编程语言的原因)。

阅读全文

变化驱动:正交设计

2016年06月10日 星期六

一个出发点

当谈起软件设计的目的时,能够获得所有人认同的答案只有一个:功能实现。 因为这是一个软件存在的根本原因。

而在计算机软件发展的初期,这一点也正是所有人做软件设计的唯一动机。因而,很自然的,整个软件都被放在单一过程中,然后用到处存在的goto语句控制流程。

尽管理论上讲,任意复杂的系统都可以被放入同一个函数里。但随着软件越来复杂,即便是智商最为发达的程序员也发现,单一过程的复杂度已经超出他的掌控极限。这逼迫人们必须对大问题进行分解,分而治之。

时至今日,尽管超大函数,上帝类依然并不罕见,但当大到一定程度,上帝类的创造者最终也会发现自己终究没有上帝般的掌控力。因而,哪怕是软件设计素养为负值的开发者,或多或少也会对一个复杂系统进行一定程度的拆分。

这就是模块化设计的最初动机。

阅读全文

第一颗子弹

2016年06月06日 星期一

软件不软的一个主要原因,是其经常处于变化之中。所以,当策略分离不同的变化方向被提出后,一个随之而来的问题也就产生了:何时分离

阅读全文

Immutability: The Dark Side

2016年06月05日 星期日

FPer对OO批评最多的是:由于OO允许在运行时修改状态,从而无法做到引用透明(Referiential Transparency)。换句话说:对于同一个函数,使用相同的输入参数,每次调用返回的结果却不相同。比如:

阅读全文

简单设计原则

2016年05月28日 星期日

我们一直在谈简单设计,但究竟什么是简单设计?更具体的说,对于同一个问题,设计决策A和B,究竟哪一个更符合简单设计的要求?

阅读全文