zoukankan      html  css  js  c++  java
  • 以人为本的程序的设计

      软件要越来越人性化,就要代替人干很多事情。软件干的事情越多,程序设计就越来越复杂。程序越来越复杂,Programer 就有义务使程序尽可能的 Simple。

      当然,这个 Simple 并不是简化需求来使代码量减少,而是运用智慧,使代码达到“繁而不乱”的效果。

      对,繁而不乱,这是艺术!

      为什么要求代码“繁而不乱”?这要从代码的使用角度说起。

      代码,说白了,是一种人与计算机交互的语言,它的使用对象有两个:计算机,和人。

      语言的作用是传递信息,而语言最根本的原则就是便于理解。

      做为计算机语言,特别是现在流行的这些高级计算机语言,能不能被计算机阅读和理解,强大的开发工具随时都会告诉你。而这些语言能不能被活生生的人类理解,这就是人们自己的事儿了。

      有些人坚定的认为,代码写出来就是给计算机执行的,其它问题一概不管。这倒干脆,不过这是非常危险的。因为代码不只是给计算机运行的,还有一个重要的作用就是给人阅读的。至少,你写完代码需要自己 Debug 一下吧……

      其实,自从有了面向对象语言,实现代码的繁而不乱已经非常的 Easy 了。不光 Easy,而且还显得是那么的优雅。

      语言都是相通的,设计者们在设计计算机语言的时候赋予了它太多人类语言的特征。所以,设计一个优秀的程序,只需要好好理解我们平时所讲的话,直接用计算机语言表达出来,就绝对是非常棒的程序。

      怎么把人类语言翻译成计算机语言?简单来讲,注意以下两点就行了:

    1.  所有名词(代词),翻译成属性
    2.  所有动词,翻译成方法

      举个简单的例子,拿我们平时最常说的一句话,来翻译一下:“我操你妹”。简单的四个字,三个称谓(代词),一个动词。翻译成计算机语言,就是:

     我.操(你.妹) 
     I.Fuck(You.Sister) 

      I 的行为 Fuck,对象是 You 这个对象的 Sister 属性。我不管 You 的 Sister 属性是谁,叫什么。当然,如果 You 的 Sister 属性为空,即你没有妹妹,那么 Fuck 这个方法就没法执行了,应该直接跳出。(**8.26 9:49添加该段**)

      怎么样?是不是对整个业务逻辑一目了然?

      基于这个思想,现实中的一切都可以使用面向对象的思想来武装。

      属性的设计比较简单,许多人往往会纠结于程序中的方法的设计,比如代码过长的大方法,还有逻辑过于复杂的笨方法。下面拿一个稍复杂一点的业务来实现一下以人为本的方法设计。

      比如,今天早上我一觉醒来,睁开眼,开始计划今天的安排。基于人类的自然使命,和我个人的社会责任感,今天我可能要干很多事情。首先我要起床、洗漱、吃早点、上班、工作、吃饭、工作、下班、吃饭,可能我还要下班回家的路上去一趟超市买点东西,晚上吃完饭再嗨一会儿(可以打打牌,上上网,看看电视),最后睡觉。这样,今天就结束了。所以,我的大脑里立刻就会出现下面这样一份“今日计划”清单:

    1. 起床
    2. 洗漱  
    3. 吃饭  
    4. 上班  
    5. 工作  
    6. 吃饭  
    7. 工作  
    8. 下班  
    9. 买东西  
    10. 吃饭
    11. 休闲  
    12. 睡觉

      如果,我把我今天的计划设计成一个程序,“今日计划”的执行方法里只写这 12 行代码,无论谁来看,都能一目了然的知道我今天都要干些什么事情了。至于你起床时是把被子用手掀开还是用脚蹬掉,起床穿衣服时是先穿裤子还是先穿内裤,这是你做“今日计划”的时候不去考虑的问题,也是跟本不用你详细考虑的问题,也是阅读你代码的人不会直接关心的问题,这些都属于“起床”这个子业务的任务,或者是“起床”这个业务的子业务。比如,我的“起床”方法就这样设计:  

    1. 伸个懒腰
    2. 掀开被子
    3. 坐起来
    4. 穿衣服
    5. 坐到床边上
    6. 穿鞋子
    7. 下床

      同样,如果谁想了解我起床的过程,看这几行代码,还是一目了然。同样,穿衣服的过程都设计到“穿衣服”方法里,有条有理。

      另外,至于吃完晚饭的休息时间,我可能打牌,可能上网,可能看电视,具体的决定,是看到时我具体的心情,所以我做计划时安排的是一个“休闲”时间,在这个休闲时间里,可以获取我的心情状态,根据不同的状态,来执行不同的休闲方式。

      不过,具体的打牌、上网、看电视,它们不是“休闲”方法的逻辑,所以也会单独的封装成一个方法来处理。

      以这种方式来分的话,整个程序逻辑清楚,结构分明。更重要的是,让读者易于理解。根本不会存在难理解的“大方法”和业务复杂的“笨方法”。

      最后,我极力的不赞成使用数字来限制程序,非常不喜欢有些人拿出一些所谓的“科学”数字来做为编码准则。例如:人类同时关注的事情不超过三个,人类同能够同时处理的信息不超过七个,以及过于滥用的二八原则,还有页面大小25行等等。人类的脑袋差别太大了,这世界上的特殊情况太多了,以及各个开发人员显示器分辩率也差别太大了,所以任何用固定数字来做为行为准则的,都有些失之偏颇了。真的完全不建议。(除非你是项目经理,在制定项目规范)

  • 相关阅读:
    从程序员到项目经理(16):原来一切问题都是可以解决的【转载】
    从程序员到项目经理(15):项目管理三大目标【转载】
    从程序员到项目经理(14):项目经理必须懂一点“章法”【转载】
    从程序员到项目经理(13):如何管理自己的时间(下)【转载】
    从程序员到项目经理(12):如何管理自己的时间(上)【转载】
    Linux的五个查找命令
    AWK 简明教程
    libstdc++.so.5: cannot open shared object file: No such file or directory
    中文分词器ICTCLAS使用方法(Java)
    Jetty实战之 安装 运行 部署
  • 原文地址:https://www.cnblogs.com/zhhh/p/2657088.html
Copyright © 2011-2022 走看看