函数设计应做到低耦合,高内聚

最近,同项目组的一位师姐请产假了,由我接手她之前的部分版本的开发工作。在开发的过程中,我阅读了某个很古老的版本的程序代码,心生感触,想在这里啰嗦几句。

该版本中很多函数的调用关系都错综复杂,让人读起来非常的费劲。我用如下的图来形象化地表示这种函数之间的调用关系。

箭头的指向为调用关系,如“函数A”调用了“函数B”、“函数C”、“函数D”、“函数E”、“函数F”,以此类推。

当函数之间的调用关系太多时,各个函数就组成了一个复杂的调用网络,很难将它们之间的关系理清楚。

那么,为什么会出现这么“糟糕”的函数设计呢?原因有以下几点:

第一,最原始版本的开发人员没有做好详细设计,程序是想到哪里就写到哪里。最原始版本犹如一座大楼的地基,地基没有打好,当然后续的工作就没那么顺利了。此外,后续的开发人员总喜欢拿之前开发人员的程序作为参照,“不好”的前辈只会教出更为“不好”的“徒弟”。

第二,项目组为了赶进度,只要求程序能够实现基本功能,并没有对代码进行严格的同行评审。“赶进度”只会产生糟糕的代码,而如果代码只是一个人说了算,那肯定会留下很多的问题。

第三,在程序演进的过程中,不同的开发人员对同一个版本的代码进行了修改。如果每个人都对一个版本的程序进行修改,由于大家编写代码的习惯都不尽相同,因此会使得程序“越改越差”。

那么,优秀的程序有什么样的要求呢?要求之一就是:函数设计应做到低耦合,高内聚。也就是说,在不增加代码复杂度的情况下,尽量减少函数之间的调用关系,在本函数实现规定的功能。

“低耦合,高内聚”的函数设计有什么好处呢?好处有以下几点:

第一,便于对程序进行维护。这点很重要,特别是刚入职的员工,如果他们阅读到了逻辑清晰、编程规范的代码,真的是一种福气。

第二,便于程序版本的演进。有了好的“榜样”,之后对程序的增删改的工作都更加的容易了。

第三,便于不同项目组或产品线之间的沟通交流。优秀的代码应该拿出来,供大家一起学习。“他山之石,可以攻玉”,只有不断地学习别人好的、成功的经验,自己的能力才能够得到提升。

当然,好的函数设计方法也不是一朝一夕就能够掌握的,只要我们坚持学习、不断总结,相信定然会写出优美的、易于阅读和理解的程序来的。

(本人微博:http://weibo.com/zhouzxi?topnav=1&wvr=5,微信号:245924426,欢迎关注!)

时间: 2024-10-11 21:29:20

函数设计应做到低耦合,高内聚的相关文章

面向对象三大特性五大原则 + 低耦合高内聚

面向对象三大特性五大原则 + 低耦合高内聚 面向对象的三大特性是"封装."多态"."继承",五大原则是"单一职责原则"."开放封闭原则"."里氏替换原则"."依赖倒置原则"."接口分离原则". 什么是面向对象 面向对象(Object Oriented,OO)是软件开发方法.面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统.交互式界面.应用结

低耦合,高内聚真的好吗?

首先来看看什么是"低耦合,高内聚",这里简单介绍一下:内聚描述的是模块内的功能联系:从功能角度来度量模块内的联系,一个好的内聚模块应当恰好完成一个任务.耦合是软件结构中各模块之间相互连接的一种度量,耦合强弱取决于模块间接口的复杂程度.进入或访问一个模块的点以及通过接口的数据. 另外"高内聚低耦合",也是软件工程中的概念,是判断设计好坏的标准,或许也可以说是设计软件所追求的目标,那么是否就是说离这个目标越近软件设计的就越好呢!如果从可维护性,可扩展性,后续架构来说,能

《如何在struts+spring+hibernate的框架下构建低耦合高内聚的软件》

问题的提出我常常在思考一个问题,我们如何能设计出高水平.高质量的软件出来.怎样是高水平.高质量的软件?它应当是易于维护.易于适应变更.可重用性好的一个系统.如何做到这一点呢?答案当然是"低耦合.高内聚"了.低耦合就是软件在构造的时候,各个模块.各个功能.各个类都不会过度依赖于它周围的环境.只有这样,才能使我们的模块(功能.类)在周围发生变更时不受影响,做到易于维护和易于适应变更.正因为如此,也使它更易于重用到其它功能类似的环境中,提高了重用性.高内聚则使软件中的各个模块(功能.类)能够

3分钟Tips:用大白话告诉你什么是低耦合|高内聚

1.高内聚 首先我们来看看内聚的含义:软件含义上的内聚其实是从化学中的分子的内聚演变过来的,化学中的分子间的作用力,作用力强则表现为内聚程度高.在软件中内聚程度的高低,标识着软件设计的好坏. 我们在进行架构设计时的内聚高低是指,设计某个模块或者关注点时,模块或关注点内部的一系列相关功能的相关程度的高低. 例如:下单模块: 一般情况下,下单模块都会有如下的信息,订单的信息,产品的信息及谁下的单(买家信息).这是基本的,那么我们设计的时候就要把相关的功能内聚到一起.当然这是从大功能(下单管理)上来说

C# 低耦合 高内聚

低耦合 loosely Coupling 松散的耦合关系=炮友 couple=夫妻 夫妻=法律约束.家庭.生活.财产.繁衍 炮友:吃喝玩乐,不会产生感情方面的依赖 内聚性 内聚性又称块内联系.指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量.若一个模块内各元素(语名之间.程序段之间)联系的越紧密,则它的内聚性就越高. 内聚性匪类(低――高): 偶然内聚;逻辑内聚;时间内聚;通信内聚;顺序内聚;功能内聚; 1 偶然内聚: 指一个模块内的各处理元素之间没有任何联系. 2 逻辑内

低耦合高内聚 - 不要把所有东西都放在 vuex中

我就举一个例子.比如,我想看电视,是否需要遥控器??请认真思考这个问题. 看似电视与"我"已经解耦了.然而,我需要通过遥控器去看电视,我的目的是看电视,但是我却需要依赖遥控器这个中间件.这就变相地将"我"与电视的依赖关系,变成了我与遥控器的依赖关系.虽然"我"与电视解耦了,但是"我"与遥控器却紧密联系在一起. 那么回到最初的问题,我的目的是看电视.我是否一定需要与电视解耦呢?答案是不一定!以此为基础,你可能会发明一个人可以直接

低耦合高聚合,封装原则

(oop)面向对象编程的一个关键原则之一就是封装,把暴漏的数据封装起来,尽可能的让对象管理它们自己的状态,因为过多的依存性会造成紧耦合性系统,使得任意一点小的改动都可能造成许多无法预料的结果.而数据封装机制是一个控制对象数据和状态强有力的方法,它对外部世界隐藏其内部细节,这就意味着每一个对象都应该尽可能少的了解系统的其他部分或者被其他部分所了解,这样一来一旦发生了变化,需要了解这一个变化的对象会比较少,因此变化也就相对来说便于改动. 内聚:内聚指的是一个模块内部各部分之间的关联程度,一个好的内聚

面向对象设计之高内聚、低耦合

内聚 内聚的含义:内聚指一个模块内部元素彼此结合的紧密程度 在面向对象领域,谈到"内聚"的时候,模块的概念远远不止我们通常所理解的"系统内的某个模块"这个范围,而是可大可小,大到一个子系统,小到一个函数,你都可以理解为内聚 里所说的 "模块".所以可以用"内聚"来判断一个函数设计是否合理,一个类设计是否合理,一个接口设计是否合理, 一个包设计是否合理,一个模块/子系统设计是否合理. 其次:"元素"究竟是什么

多聚合,少继承,低耦合,高内聚

面向对象的基本原则:多聚合,少继承.低耦合,高内聚. [高内聚.低耦合] 内聚:每个模块尽可能独立完成自己的功能,不依赖于模块外部的代码. 耦合:模块与模块之间接口的复杂程度,模块之间联系越复杂耦合度越高,牵一发而动全身. 目的:使得模块的"可重用性"."移植性"大大增强 通常程序结构中各模块的内聚程度越高,模块间的耦合程度就越低 模块粒度: 『函数』 高内聚:尽可能类的每个成员方法只完成一件事(最大限度的聚合)低 耦合:减少类内部,一个成员方法调用另一个成员方法