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 下第 ...
随机推荐
- codeforces 450C. Jzzhu and Chocolate 解题报告(449A)
题目链接:http://codeforces.com/contest/450/problem/C 题目意思:给出一个 n * m 大小的chocolate bar,你需要在这个bar上切 k 刀,使得 ...
- DGA聚类 使用DBScan
features = sc.parallelize(data_group[idx]).map(lambda x: (x.host_ip+'^'+x.domain, 1)).reduceByKey(op ...
- LA-3905 (扫描线)
题意: 给一些流星的初始位置和运动向量,给了相机的拍摄范围;问你最多能拍到多少颗流星; 思路: 将流星用出现在相机拍摄范围内的时间段表示;sort后在扫面端点更新最大值; Ac代码: #include ...
- Android「后台下载」Feb.24小记
参考了CSDN上的这个文章(HERE),之前只是新开一个线程: public class DownloadThread implements Runnable{ String tarFile ; pu ...
- setTimeout的第三个参数
最熟悉的地方,往往会忽略一些细节.就比如 setTimeout 函数,做前端开发的同学都会很熟悉这个函数,经常使用这个函数,但是知道这个函数还有第三个参数的小伙伴可能就不多了.起码我在阅读阮老师的 e ...
- [SoapUI] Read data from response , use it to update parameter
import com.eviware.soapui.support.GroovyUtils def groovyUtils = new GroovyUtils( context ) def holde ...
- 中文环境下PostgreSQL的使用
虽然官方文档有提到编码的问题,但是对于中文讲的比较简单,给中文的PostgreSQL用户带来很多困扰,本文简单简述一下中文环境下PostgreSQL如何正确设置编码. 一.服务器端的编码设置 Post ...
- 4、html的body内标签之input系列
一.input标签与form表单 <!DOCTYPE html> <html lang="en"> <head> <meta charse ...
- ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 16. 角色管理
注入UserManager和RoleManager 建立View页面.这段视频中没有录. RoleManager的服务没有注册 注册的地方进行修改 再次运行就可以了 这个ViewModel实际上只需要 ...
- Unity3D模型制作规范[转]
本文提到的所有数字模型制作,全部是用3D MAX建立的模型,即使是不同的驱动引擎,对模型的要求基本是相同的.当一个VR模型制作完成时,它所包含的基本内容包括:场景尺寸.单位,模型归类塌陷.命名.节点编 ...