降低软件复杂度

本文原创:yangyanchun

在进行软件开发时,我们常常会追求软件的高可维护性,高可维护性意味着当有新需求来时,系统易扩展;当出现bug时,开发人员易定位。而当我们说一个系统的可维护性太差时,往往指的是该系统太过复杂,导致给系统增加新功能时容易出现bug,而出现bug之后又难以定位。

什么是复杂度

修改扩散

修改时有连锁反应,相互依赖,耦合度高,某部分代码不能被独立地修改和理解,必定会牵涉到其他代码。

认知负担

开发人员需要多长时间来理解功能模块,从代码中难以找到重要信息

不可知

开发人员在接到任务时,不知从哪里入手,数据流向混乱。

复杂性的危害在于,它会递增。你做错了一个决定,导致后面的代码都基于前面的错误实现,整个软件变得越来越复杂。"我们先把产品做出来,后面再改进",这根本做不到。

如何降低复杂性

重视设计和细节的改进

拒绝战术编程,采用战略编程

战术编程致力于完成任务,新增加特性或者修改Bug时,能解决问题就好。这种工作方式,会逐渐增加系统的复杂性。如果系统复杂到难以维护时,再去重构会花费大量的时间,很可能会影响新功能的迭代。

战略编程,是指重视设计并愿意投入时间,短时间内可能会降低工作效率,但是长期看,会增加系统的可维护性和迭代效率。


code.jpg
设计两次

为什么该方案可行?

架构图、接口设计、时间人力估算

在已有资源限制下,为什么该方案是最优的?

在关键点或争议处提供二到三种方案,并给出建议方案

水平分层,垂直分模块

层次和抽象

复杂性下沉,尽量让用户使用简单,接口要简单,实现可以复杂。

深模块:功能强大,接口简单,是抽象的最佳实践,通过排除模块内部不重要的信息,让用户更容易理解和使用。

浅模块:功能简单,接口复杂,无助于解决复杂性。因为他们提供的收益(功能)被学习和使用成本抵消了。


class.jpg

好的 class 应该是"小接口,大功能",糟糕的 class 是"大接口,小功能"。好的设计是,大量的功能隐藏在简单接口之下,对用户不可见,用户感觉不到这是一个复杂的 class。

异常处理

尽可能减少需要处理异常的可能性

用户必须面对所有的 error异常"反正我告诉你出错了,怎么解决是你的事。",正确的做法是,除了那些必须告诉用户的错误,其他错误尽量在软件内部处理掉,不要抛出。

通用和专用

满足当前功能,快速实现,接口设计通用化

满足当前需求最简单的接口是什么?在不减少功能的前提下,减少方法的数量,意味着接口的通用性提升了。

接口的使用场景有多少?如果接口只有一个特定的场景,可以将多个这样的接口合并成通用接口。

满足当前需求情况下,接口的易用性?如果接口很难使用,意味着我们可能过度设计了,需要拆分。

注释文档

比如“好代码是自注释的”、”没有时间“、“现有的注释都没有用,为什么还要浪费时间”等等。这些观点是站不住脚的。“好代码是自注释的”只在某些场景下是合理的,比如为变量和方法选择合适的名称,可以不用单独注释。但是更多的情况,代码很难体现开发人员的设计思路。好的注释可以减少文档工作。

使用注释提升系统可维护性, 重视what、why,而不是how(而不是代码是如何实现的)

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

推荐阅读更多精彩内容

  • 一、前言 斯坦福教授、Tcl语言发明者John Ousterhout 的著作《A Philosophy of So...
    朱织果阅读 493评论 0 0
  • 一、前言 斯坦福教授、Tcl语言发明者John Ousterhout 的著作《A Philosophy of So...
    Sean_81f6阅读 363评论 0 0
  • 前言 在进行软件开发时,我们常常会追求软件的高可维护性,高可维护性意味着当有新需求来时,系统易扩展;当出现bug时...
    元闰子阅读 319评论 0 0
  • 深夜路灯照亮的方圆 是心里张罗的荒山 我想种上各色的花 好在花开灿烂时候 寒灯也有红颜待 黄昏的柔情像大海 散尽了...
    话晨阅读 236评论 0 12
  • 初次见面,一见钟情 第二章 经店员描述,店主叶敏两天前就已经消失了。要不是今天翻开店主笔记本上两个血淋淋的“救我”...
    九星辰阅读 165评论 3 5