程序设计中的设计

通常我们所谓的程序设计,其实包含编码与设计两个部分,编码行为一般为人们所熟知,被称为coding,然而设计过程却容易为大家所忽视。

设计的作用

程序设计中的设计

日常生活中优秀的设计产品很容易被人所铭记。iPhone就是一个经典的设计案例。当人们还在使用复杂的布满按键的小屏幕Nokia手机的时候,苹果用一款简洁的设计征服了用户的心。

程序设计中的设计

手机本质上是人们完成日常办公的工具,大家之所以热爱iPhone,是由于iPhone的设计让使用者更加的方便,更加的高效。

程序设计中的设计

现在的程序系统日趋庞大和复杂,程序员们通常用类似搭积木的方式完成更高级功能的开发,我们所编写的每一段程序都可能是另一端代码实现其功能的工具。

设计优秀的程序,会让使用它的人事半功倍,而设计糟糕的程序往往会让使用者手忙脚乱,摸不着头脑。

以下是W3C标准委员会设计的文档对象模型(DOM)中早期用来访问元素的一些API。最后的代码动态的创建了一个div元素,设置样式属性,并把它追加到了页面文档中

程序设计中的设计

光是复杂而冗长的命名就足以令人生畏,我们再看看一款优秀的前端框架jQuery的API设计

程序设计中的设计

同样的功能,是不是简单易懂的多。

设计的层级

程序设计中的设计

优秀的设计通常并不能一蹴而就,需要精细的思考。有一个合理的思维过程更有助于我们做出良好的设计决策。这就是设计的层级。大胡子习惯把它分成以下几个部分:

需求

在需求阶段,我们需要明确程序要解决的问题和使用场景。最好的办法是尽早开始使用你的程序,甚至在他们还没有被设计出来之前。比如:“测试驱动” 就是一个比较不错的办法。

结构

在结构设计阶段,我们会设计出程序需要哪些信息、分为哪些模块以及如何组织他们。其中比较有帮助的两个工具是:

  1. 信息架构分析
  2. 领域模型

信息架构模型有助于帮你分析出你的程序需要获取那些类型信息,需要什么样的功能,如何表达。

程序设计中的设计
以一个IO库的设计为例分析信息架构

领域模型有助于你更好的组织你的程序模块

程序设计中的设计
领域模型的例子

接口

在接口设计阶段,我们则需要更加具体的明确我们接口的定义:即命名,参数、返回值、调用流程等。
其中值得注意的点是:

  1. 命名是否足够清晰,容易理解和记忆。
  2. 参数应该以合理而一致的顺序组织,便于记忆和了解。
  3. 返回值是否传达了足够的信息。
  4. 调用流程是否合理,能否简化。

程序设计中的设计

在这个例子里 string.h 中 strcopy 和 bcopy 就是糟糕的例子,不看文档很难记住参数的顺序,而java的Collections和concurrent包里的设计则要好的多

链式调用可以很好的解决复杂的调用流程,尤其是在IDE工具的支持下,我们几乎可以不用看文档就可以完成大段代码的编写。

程序设计中的设计
非链式调用

程序设计中的设计
链式调用

总体的原则就是:

  1. 容易学习
  2. 自说明,甚至不需要文档就可以使用
  3. 防呆设计,很难出错
  4. 容易维护和扩展

实现

在实现阶段更多的是算法与具体逻辑的选择,更多的就是大家所熟知的coding过程了,可能需要根据性能考虑一些设计方案的取舍。不在赘述。

小结

设计优秀的程序对于公司来说是一笔价值连城的资产,对于程序员自身来说就如同给深处地狱的我们送上一杯清凉的冰水。以上是大胡子对于程序设计方面的一些思考,希望能够帮助到大家。

上一篇:使IE6下PNG背景透明的七种方法任你选


下一篇:浅谈Mysql原理与优化(四)—— 存储引擎