Clean Code 第十章 : 类
最近的CleanCode读到了第十章。这一张主要讲了如何去构造一个类,感觉的CleanCode至此已经不仅仅是单纯的讲如何‘写’出漂亮的代码,而是从设计方向上去构造出好的代码了。
本章节主要讲了:
* 类的组织
* 我们构造的类应该短小
* 我们构造类应该是为修改而组织
类的组织
任何的设计最后都将落实到实现上来,漂亮的实现一个类与构造这个类应该是同等重要的。我们在写一个类的实现时,类中的成员应该遵循以下顺序:
1. 公共静态常量
2. 私有静态常量
3. 实体变量
4. 公共函数
此外,我们一般将某个函数的私有工具函数放到这个函数后面,满足自顶向下的原则。这样会使得我们的程序更加的易读,用作者原话说:使读程序像是读文章一样流畅。并且我们在书写类的时候应该尽量保持 变量 和 函数 的私有性。
类应当短小
类同函数一样,应该是短小的。单数类的短小应该与函数的短小区别开来。
通常我们说函数要短小主要还是限制在她的行数上。
而类的短小则是指类的职责应单一。
这里我们涉及到了一个原则: 单一职责原则(SRP)。
SRP认为 :类或者模块应该只有一条加以修改的理由。
不得不说这是一个很抽象的定义。
我所理解的但一职责原则是要将业务关注的那一部分逻辑的类严格按照功能拆分,这样会让我们的类显得更加灵活,清晰,低复杂性。
一个生动的讲SRP的例子
SRP 可能会带来的一些影响:
SRP原则无疑会让你拥有更多更小的类,这会让阅读者难以一目了然的抓住全局
花费你更多的时间去设计短小的类
增加代码行数
阅读的时候可能会在多个文档中跳转
不过以上的某些问题可以通过良性组织我们的文档结构加以改善的,对于我而言,让代码拥有更高的可维护性而付出这些代价是值得的。
保持內聚
什么是内聚性?我的理解是类的数据和操作的相关性。通常我们说:
方法操作的变量越多,说明方法和类的黏度越高, 内聚性越强
类中的方法啊和变量相互依赖,形成一个紧密的逻辑整体,则内聚性越高
毫无疑问,当一个类丧失内聚性的时候我们应当拆分它。
为修改而组织
首先,我们的类应该遵循开放-封闭原则(OCP)。即类应当是对扩展开放,对修改关闭的。
其次,类的功能应该是独立的,这样当你要重构一个类的时候,本处的修改不会影响到其他的地方。
如何做到此处的修改不影响其他地方?我们应当隔离修改。这里就说到了另一个原则:依赖倒置原则(DIP)。DIP其本质是类应当依赖于抽象,而不是具体的实现细节。
我对此的理解是 抽象类是依赖与具体的类而产生的,现在我们在构造类的时候应该要去依赖别的抽象类,所以叫做依赖倒置。
遵循依赖倒置原则可以有效的降低耦合,隔离细节。
Clean Code 第十章 : 类的更多相关文章
- 说说怎么写clean code
前两天参加了公司组织的一个培训,主题是“如何写出好的代码” ,刚看到这个主题,第一反应是又不知道是哪个培训机构来忽悠钱的!老大安排了,就去听听呗. 说实在的,课程内容没有什么新鲜的东西,就是讲讲如何发 ...
- 小课堂week13 Clean Code Part2
Clean Code Part2 对象与数据结构 首先让我们进行一个严肃的思考,对象与数据结构的区别在哪里? 如下两段代码分别用数据结构和对象的方法来描述了一个Point. public class ...
- Clean Code – Chapter 3: Functions
Small Blocks and Indenting The blocks within if statements, else statements, while statements, and s ...
- 《Clean Code》 代码简洁之道
作者介绍 原文作者: Robert C. Martin, Object Mentor公司总裁,面向对象设计.模式.UML.敏捷方法学和极限编程领域的资深顾问,是<敏捷软件开发:原则.模式.与实践 ...
- 聊聊clean code
clean code,顾名思义就是整洁的代码,或者说清晰.漂亮的代码,相信大多数工程师都希望自己能写出这样的代码. 也许这是个千人千面的话题,每个工程师都有自己的理解.比如我,从一个天天被骂代码写得烂 ...
- 《Clean Code》一书回顾
<Clean Code>一书从翻开至今,已经差不多两个月的时间了,尽管刨去其中的假期,算下来实在是读得有点慢.阅读期间,断断续续的做了不少笔记.之前,每每在读完了一本技术书籍之后,其中的诸 ...
- Clean Code之JavaScript代码示例
译者按: 简洁的代码可以避免写出过多的BUG. 原文: JavaScript Clean Code - Best Practices 译者: Fundebug 本文采用意译,版权归原作者所有 引文 作 ...
- 【笔记】Clean Code(持续更新)
这个暑假出来实习,第一次体会到在一个团队中开发的体验,与网上的网站看到的大为不同,以前看网上说什么程序员写了屎山代码,写了一堆模糊的注释或者说垃圾代码不写注释. 但在我的实习体验中,代码虽然看起来很多 ...
- Clean Code 笔记 之 第二章
你是否真正的会命名 前言 这是我第二次看这本书了(Clean Code)的时候,第一次看的时候是,看到某世界五百强在他们的代码中我竟然看不到一句注释,现在我还记得当时的情景,当我Download 下第 ...
随机推荐
- nyoj--86--找球号(一)(hash&&set&&二分)
找球号(一) 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 在某一国度里流行着一种游戏.游戏规则为:在一堆球中,每个球上都有一个整数编号i(0<=i<=10 ...
- 【CQ18阶梯赛第一场】题解
[A-风格不统一如何写程序] 输入字符串,得到长度,对于每个字符:如果是大写,则改为:‘_’+小写:如果是‘_’则忽略‘_’,并且把后面的小写改为大写. #include<cstdio> ...
- CodeForces-884D:Boxes And Balls(合并石子)
Ivan has n different boxes. The first of them contains some balls of n different colors. Ivan wants ...
- 「NOI2004」「LuoguP1486」郁闷的出纳员
Descrption OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常调 ...
- Watir: Watir-WebDriver对打开的浏览器attach操作
Watir-WebDriver对于已经打开的浏览器,没有办法进行Attach操作. 但是对于自动化操作浏览器过程中点击某链接,打开的新浏览器,是能够定位到的. require 'watir-webdr ...
- Darwin Streaming Server 核心代码分析
基本概念 首先,我针对的代码是Darwin Streaming Server 6.0.3未经任何改动的版本. Darwin Streaming Server从设计模式上看,采用了Reactor的并发服 ...
- Start Developing Mac Apps -- Mac App Store Mac 应用商店
Mac App Store The information you’ve read so far focused on how to create an app in Xcode. However ...
- django上课笔记3-ORM补充-CSRF (跨站请求伪造)
一.ORM补充 ORM操作三大难点: 正向操作反向操作连表 其它基本操作(包含F Q extra) 性能相关的操作 class UserInfo(models.Model): uid = models ...
- Android 截屏的各种骚操作
本文公众号「AndroidTraveler」首发. 背景 在实际的应用场景中,Android 手机的截屏其实是很普遍的. 比如说 PPT 演示,比如说技术博客图文并茂讲解. 因此懂得 Android ...
- TP3.2单字母函数
A方法 A方法用于在内部实例化控制器 调用格式:A(‘[项目://][分组/]模块’,’控制器层名称’) 最简单的用法: $User = A('User'); 表示实例化当前项目的UserAction ...