(C++编程规范第5条)一个实体应该只有一个紧凑的职责
来源:互联网 发布:软件工程质量 编辑:程序博客网 时间:2024/05/22 03:24
一、摘要:
一次只解决一个问题:只给一个实体(变量、函数、类、模块、命名控件和库)赋予一个定义良好的职责。随着实体变大,其职责范围自然也会扩大,但是职责不应该发散。
二、讨论:
人们常说,好的商业理念能够一言以蔽之。同样,每个程序实体也应该只有一个明确的目的。
如果一个实体有几个不同的目的,则给使用带来的难度往往会激增,因为这种实体除了会增加理解难度、复杂性和各部分中的错误外,还会导致其他问题。这种实体不仅更大(常常毫无合理理由),而且更难以使用和维护。此外,这种实体经常会为自身的一些特殊用途提供有问题的接口,因为各个功能领域之间的部分重叠,会影响干净利落地实现每个功能所需的洞察力。
具有多个不同职责的实体通常都是难以设计和实现的。“多个职责”经常意味着“多重性格”——可能的行为和状态的各种组合方式。应该选择目的单一的函数(见第39条),小而且目的单一的类,和边界清晰的紧凑模块。
应该用较小的低层抽象构建更高层次的抽象。要避免将几个低层次抽象集合成一个较大的低层次抽象聚合体。用几个简单的行为来实现一个复杂的行为,比反其道而行之更加容易。
三、示例:
例1 realloc 在标准C语言中,realloc是一个臭名昭著的不良设计。这个函数承担了太多的任务:如果传入的指针参数为NULL就分配内存空间,如果传入的大小参数为0就释放内存空间,如果可行则就地重新分配,如果不行则移到其他地方分配。这个函数不易与扩展,普遍认为:他是一个目光短浅的失败设计。
例2 basic_string 在标准C++语言中,std::basic_string是另一个臭名昭著的不良设计——巨大的类设计。在一个臃肿的类中添加了太多”多多益善“的功能,而这只是为了试图成为容器但却没有做到,在用迭代还是索引上犹豫不决,还毫无道理地重复了许多标准算法,而为扩展所留的裕度又很小(见第44条的示例)。
- (C++编程规范第5条)一个实体应该只有一个紧凑的职责
- C++编程规范之5:一个实体应该只有一个紧凑的职责
- 一个实体应该只有一个紧凑的职责
- ACIS 创建只有一个点的实体(BODY)
- 一个好的C程序员应该做到
- 最为一个dba的职责
- 查看一个实体的类型(包括自定义实体)
- 只有一个实例的类
- 只有一个broker的例子
- 自定义一个只有一个图片的dialog
- 软件开发中设计为什么应该只有一个所有人?
- 网上一个C# 编程规范
- Java持久性API(The Java Persistence API)-一个简单的实体持久性编程模型
- Java持久性API(The Java Persistence API)-一个简单的实体持久性编程模型
- 一次向数据库中插入多条相同记录的SQL方法(只有一个列不同)
- 有些数的素因子只有3,5,7.请设计一个算法,找出其中第k个数
- 一个电商项目的Web服务化改造3:改进方案の规范和约定、单表、单一职责
- 一个叫 team 的表,里面只有一个字段name, 一共有4 条纪录,分别是a,b,c,d, 对应四个球队,现在四个球队进行比赛,用一条sql 语句显示所有可能的比赛组合.
- ***LeetCode 42. Trapping Rain Water
- struts2工作原理(转载)
- C++拷贝构造函数(深拷贝,浅拷贝)
- 网页中的服务器端和客户端脚本
- win7 64位操作系统中 Oracle 11g 安装教程(图解)
- (C++编程规范第5条)一个实体应该只有一个紧凑的职责
- 移动web应用开发——Sencha Touch篇(2)
- EXCEL追加Botton
- winCE 自定义控件开发之groupBox
- Android自定义ScrollView实现上下反弹效果
- 用ctex编辑文档
- HTTP 错误 404.2 - Not Found。由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面
- 我们接下来说飞控
- 程序员成长的 10个阶段