浅谈函数的内聚性

简介: 在设计类的时候,抽象和封装已经很大程度上取代了内聚性。但是在子程序这一层次上,内聚性仍是常用的启发式方法。下面内容,来自《代码大全》 对与子程序而言,内聚性是指子程序中各个操作之间的联系的紧密程度。

在设计类的时候,抽象和封装已经很大程度上取代了内聚性。但是在子程序这一层次上,内聚性仍是常用的启发式方法。下面内容,来自《代码大全》

对与子程序而言,内聚性是指子程序中各个操作之间的联系的紧密程度。

我们的目标是让子程序只把一件事情做好,不再做任何其他事情。

内聚性是针对操作的概念。即操作具有内聚性。通常,一个操作指一个语句,或一个函数调用。一个是简单的操作,一个是复杂的操作。

内聚性的一些概念,理解概念有助于思考如何让子程序尽可能的内聚。

1、  功能的内聚性:让一个子程序仅执行一项操作。这是最强的也是最好的内聚性。其他的内聚性则不够理想。

2、  顺序上的内聚性:子程序内包含按照特定顺序执行的操作,这些步骤需要共享数据,而只有全部执行完毕后,才完成了一下完整的功能。 顺序上的内聚性设计成功能上的内聚性需要对顺序进行分解,形成多个功能更加单一的子程序 

3、  通信上的内聚性:子程序中的不同操作使用了同样的数据,当不存在其他任何联系。 优化的方法是将子程序分解为多个子程序。

4、  临时的内聚性:子程序中含有一些因为需要同时执行才放到一起的操作。 优化方法是把临时性的子程序看成是一系列事件的组织者,即让它直接调用其他的子程序,而不是直接执行所有的操作。另外,可以通过函数的命名,表达子程序完成的功能。避免使用多个操作叠加的方法命名,因为它暗示子程序只有巧合的内聚性。

除功能的内聚性外,其他类型的内聚性都是不可取的。要想办法避免。

1、  过程上的内聚性:子程序中的操作是按特定的顺序进行的,除此外没有任何联系。对子程序分解,把不同的功能纳入不同的子程序中,让调用方的子程序具有单一而完整的功能。

2、  逻辑上的内聚性:若干操作被放入同一个子程序中,通过传入的控制标志选择执行其中的一项操作。各个操作间没有任何的逻辑关系,这些操作只是被包含在一个很大的case 或 if 语句中。如果此子程序只是分发命令,根据命令调用不同的子程序,则这种做法也是不错的。其他的不好的情况,可以通过分解来进行优化。分解为多个独立的子程序。

3、  巧合的内聚性:子程序内部的各个操作间没有任何的关联。

内聚性考虑的是在一个子程序内部,操作的关联程度。

编写功能上的内聚性的子程序几乎总是可能的,因此把注意力集中于功能上的内聚性,从而得到最大的收获。

使用上面的建议对我的流程引擎程序进行内聚性的优化,发现确实很有价值。值得在后面的设计和编码中坚持这种优化。


转自博客:
http://blog.csdn.net/chgaowei/article/details/4927437

参考博客:
http://blog.sina.com.cn/s/blog_4ca059540100jnk7.html

相关文章
|
消息中间件 缓存 监控
系统稳定性建设实践总结
2020年,注定是个不平凡的一年。疫情的蔓延打乱了大家既定的原有的计划,同时也催生了一些在线业务办理能力的应用诉求,作为技术同学,需要在短时间内快速支持建设系统能力并保障其运行系统稳定性。恰逢年终月份,正好梳理总结下自己的系统稳定性建设经验和思考。
系统稳定性建设实践总结
|
缓存 关系型数据库 MySQL
Mac安装brew
Mac安装brew
2205 6
|
监控 安全 测试技术
现在公司都在用的CI/CD框架到底是什么?
现在公司都在用的CI/CD框架到底是什么?
6536 1
|
关系型数据库 MySQL 中间件
MySQL 中如何实现分库分表?常见的分库分表策略有哪些?
在MySQL中,分库分表(Sharding)通过将数据分散到多个数据库或表中,以应对大量数据带来的性能和扩展性问题。常见策略包括:哈希分片(分布均匀,查询效率高)、范围分片(适合范围查询)、列表分片(适用于特定值查询)、复合分片(灵活性高)和动态分片(灵活应对负载变化)。每种策略各有优劣,需根据业务需求选择。常用工具如MyCAT、ShardingSphere和TDDL可简化实现过程。
|
弹性计算 固态存储 开发者
阿里云99元服务器,性价比之王!新老用户都值得拥有!
阿里云99元服务器ECS经济型e实例,2核2G配置,3M固定带宽,40G ESSD Entry系统盘,适合个人开发者、学生和小微企业用于中小型网站建设和轻量级应用。CPU基于Intel Xeon Platinum架构,网络带宽支持最高2Gbps突发,云盘提供0.8万IOPS。3M带宽下载速度达384KB/s,上传速度1280KB/s,不限流量。续费仍为99元/年
904 0
|
监控 Java API
如何通过监控工具来诊断G1垃圾回收器的性能问题?
如何通过监控工具来诊断G1垃圾回收器的性能问题?
235 2
|
敏捷开发 前端开发 测试技术
软件开发工作流【详解】(含公司产品研发流程图、大厂研发架构图、大厂研发流程图)
软件开发工作流【详解】(含公司产品研发流程图、大厂研发架构图、大厂研发流程图)
8976 1
|
消息中间件 缓存 Cloud Native
大促场景系统稳定性保障实践经验总结
11月11日0点刚过26秒,天猫双11的订单创建峰值就达到58.3万笔/秒,阿里云又一次扛住全球最大规模流量洪峰!58.3万笔/秒,这一数字是2009年第一次天猫双11的1457倍。
13797 102
大促场景系统稳定性保障实践经验总结
|
测试技术 API
代码整洁之道(一)最佳实践小结
Any fool can write code that a computer can understand. Good programmers write code that humans can understand. 普通的工程师堆砌代码,优秀的工程师优雅代码,卓越的工程师简化代码。
10310 154
|
算法 编译器 应用服务中间件
加权随机设计与实现
加权随机,是指当我们从某种容器中随机选择一个元素,每个元素被选中的机会并不相等,而是由相对“权重”(或概率)被选中的,也就是说我们想要有“偏心”的得到某种随机结果。
79489 1
加权随机设计与实现