软件设计之道-简洁

1. 软件设计目标

<strong>帮助其它人</strong>,做与软件相关的决策时,指导法则就是判断能够提供什么样的帮助。一个人写出优秀软件的能力,完全取决于他在多大程度上理解了“帮助其它人”的思想。

  1. 确保软件能够提尽可能多的帮助;
  2. 确保软件能够持续提供尽可能多的帮助;
  3. 设计程序员能尽可能容易开发和维护的软件系统,这样的系统才能为用户提供尽可能多的帮助,而且能持续提供尽可能多的帮助;

2. 关于未来

1.相比降低实现成本,降低维护成本更加重要
2.设计质量的好坏,正比于该系统未来能持续帮助他人时间的长度
通俗点就是,如果你的软件只能在未来几小时内提供帮助,就不需要花太多的功夫去设计,如果需要在未来10年内都能派上用场,就需要花很多精力去设计。
3.所以,软件设计时最关注的应该是未来。但是,未来的某些事情,是我们所不知道的。程序员犯的最常见也是最严重的错误,就是在其实不知道未来的情况下去预测未来。
在软件设计时,可以根据已知的信息去做某些决策,目的是为了创造更好的未来(提升价值、降低维护成本),而不必预测未来究竟发生什么具体的事情。

3. 关于变化

程序存在的时间越久,它的某个部分需要变化的可能性就越高;
关键在于,我们并不需要去预测有什么变化 ,我们知道的是,变化必然会发生,程序应该<strong>保证尽可能合理的灵活性</strong>。
回预某个特定文件修改历史,问问自己,最初写这个文件时,你能预测到这些变化吗?是否一开始写好就能够减轻后期的工作量。总的来说,就是尝试理解每次修改,看看能否从中得到一些关于软件开发的新收获。

软件设计三大误区

  1. 编写不必要的代码
    不要编写不需要的代码,并且要删除没有用到的代码。
  2. 代码难以修改(僵化设计)
* 对未来做太多假设
* 不仔细设计就开始编码
* 设计程序时,应当根据现在知道的确切的需求,而不是我们认为未来会出现的需求。
  1. 过分追求通用;
    • 仅仅根据目前确知的需求来考虑通用
    • 如果设计让事情变复杂而不是变简单,就是在做过度工程

渐进式设计
渐进式开发

4. 缺陷和设计

最好的设计,就是能适应外界尽可能多的变化,而软件自身的变化要尽可能的少

  1. 永远不要"修正"任何东西,除非它真是一个问题,而且有证据表明问题确实存在;
  1. 避免重复
    理想情况下,任何系统里的任何信息,都应当只存在一次或只存在一个地方;让各处的代码可以“使用Use”、“调用Call”、“包含Include”已有的其它代码;

5. 简洁

软件的任何一部分越简单,维护难度越小,成本越低。
简洁是指某部分的代码,而不是指整个系统。

  1. 简洁是相对的
  1. 简洁到什么程度?傻子也能看懂
  2. 保持一致
    如果在一个地方采取了某种规则,就应当在其它每个地方都遵守这种规则,如变量命名方式等。
  3. 可读性
    • 空白:字符、代码行之间留有合适的空白
    • 命名:名字应该足够长,能完整表达其意义或描述其功能,但不能太长影响阅读
    • 注释:程序简单的不能再简单的时候,再添加注释

6. 复杂性

以下情况会增加复杂性:

  • 扩展软件的用途:应当绝对禁止这样做
  • 新增程序员: 除非是高高手
  • 做无谓的改变:需求变化、设计变化、代码变化等,谨慎决策
  • 困于糟糕的技术:先前采用的技术不能灵活地适应未来的需求
  • 理解错误:越不理解自己的工作,就越容易设计出复杂的系统
  • 糟糕的设计或不做设计:指的是“没有为变化做设计
  • 重新发明轮子:不要什么都自力更生,使用成熟的轮子

复杂性及错误的解决办法

需要反问的问题是:真正要解决的问题是什么?

  • 问题复杂
    解法不一定复杂;大多数麻烦的设计问题,都可以用在纸上画图或写出来的办法中找到答案。
  • 应对复杂性
  • 如果系统中某个部分太过复杂,有个好办法可以解决:把它分解成几个独立的小部分,逐步重新设计;每次修改都应该足够小,这样可以放心动手,不会让事情变得更复杂。
  • 如果遇到不可解决的复杂性,在程序外面妥善包装上一层,让其它程序员更容易理解和使用

7. 测试

测试法则:

  • 对软件行为的了解程度,等于真正测试它的程度。测试程度包括:软件有多个方面曾经测试过,上次测试是多久以前,在多少不同的环境下经过测试等。
  • 必须保证测试是准确的,它的行为完全符合预期,测试结果必须有效。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容

  • 文章来自:http://blog.csdn.net/mj813/article/details/52451355 ...
    好大一只鹏阅读 9,187评论 2 126
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,475评论 25 707
  • 1.测试与软件模型 软件开发生命周期模型指的是软件开发全过程、活动和任务的结构性框架。软件项目的开发包括:需求、设...
    Mr希灵阅读 21,928评论 7 278
  • 这是我下定决心要写的第一个完整的故事,从人物的限定,场景的构造,时代和背景都是架空全新萌生的。由于故事我将它定在了...
    相思不惘阅读 233评论 0 1
  • 想回家,怯回家,每次回老家心里都有那么几分伤感,这就是乡愁。 十一妹妹结婚,一大家子从各地赶到西安参加婚礼,完了举...
    厚脸皮的鱼阅读 219评论 0 0