最近的CleanCode读到了第十章。这一张主要讲了如何去构造一个类,感觉的CleanCode至此已经不仅仅是单纯的讲如何‘写’出漂亮的代码,而是从设计方向上去构造出好的代码了。

本章节主要讲了:

 * 类的组织
* 我们构造的类应该短小
* 我们构造类应该是为修改而组织

类的组织

任何的设计最后都将落实到实现上来,漂亮的实现一个类与构造这个类应该是同等重要的。我们在写一个类的实现时,类中的成员应该遵循以下顺序:

 1. 公共静态常量
2. 私有静态常量
3. 实体变量
4. 公共函数

此外,我们一般将某个函数的私有工具函数放到这个函数后面,满足自顶向下的原则。这样会使得我们的程序更加的易读,用作者原话说:使读程序像是读文章一样流畅。并且我们在书写类的时候应该尽量保持 变量 和 函数 的私有性。

类应当短小

类同函数一样,应该是短小的。单数类的短小应该与函数的短小区别开来。

通常我们说函数要短小主要还是限制在她的行数上。
而类的短小则是指类的职责应单一。

这里我们涉及到了一个原则: 单一职责原则(SRP)

SRP认为 :类或者模块应该只有一条加以修改的理由。

不得不说这是一个很抽象的定义。

我所理解的但一职责原则是要将业务关注的那一部分逻辑的类严格按照功能拆分,这样会让我们的类显得更加灵活,清晰,低复杂性。

一个生动的讲SRP的例子

SRP 可能会带来的一些影响:

SRP原则无疑会让你拥有更多更小的类,这会让阅读者难以一目了然的抓住全局
花费你更多的时间去设计短小的类
增加代码行数
阅读的时候可能会在多个文档中跳转

不过以上的某些问题可以通过良性组织我们的文档结构加以改善的,对于我而言,让代码拥有更高的可维护性而付出这些代价是值得的。

保持內聚

什么是内聚性?我的理解是类的数据和操作的相关性。通常我们说:

方法操作的变量越多,说明方法和类的黏度越高, 内聚性越强
类中的方法啊和变量相互依赖,形成一个紧密的逻辑整体,则内聚性越高

毫无疑问,当一个类丧失内聚性的时候我们应当拆分它。

为修改而组织

首先,我们的类应该遵循开放-封闭原则(OCP)。即类应当是对扩展开放,对修改关闭的。

其次,类的功能应该是独立的,这样当你要重构一个类的时候,本处的修改不会影响到其他的地方。

如何做到此处的修改不影响其他地方?我们应当隔离修改。这里就说到了另一个原则:依赖倒置原则(DIP)。DIP其本质是类应当依赖于抽象,而不是具体的实现细节。

我对此的理解是 抽象类是依赖与具体的类而产生的,现在我们在构造类的时候应该要去依赖别的抽象类,所以叫做依赖倒置。

遵循依赖倒置原则可以有效的降低耦合,隔离细节。

Clean Code 第十章 : 类的更多相关文章

  1. 说说怎么写clean code

    前两天参加了公司组织的一个培训,主题是“如何写出好的代码” ,刚看到这个主题,第一反应是又不知道是哪个培训机构来忽悠钱的!老大安排了,就去听听呗. 说实在的,课程内容没有什么新鲜的东西,就是讲讲如何发 ...

  2. 小课堂week13 Clean Code Part2

    Clean Code Part2 对象与数据结构 首先让我们进行一个严肃的思考,对象与数据结构的区别在哪里? 如下两段代码分别用数据结构和对象的方法来描述了一个Point. public class ...

  3. Clean Code – Chapter 3: Functions

    Small Blocks and Indenting The blocks within if statements, else statements, while statements, and s ...

  4. 《Clean Code》 代码简洁之道

    作者介绍 原文作者: Robert C. Martin, Object Mentor公司总裁,面向对象设计.模式.UML.敏捷方法学和极限编程领域的资深顾问,是<敏捷软件开发:原则.模式.与实践 ...

  5. 聊聊clean code

    clean code,顾名思义就是整洁的代码,或者说清晰.漂亮的代码,相信大多数工程师都希望自己能写出这样的代码. 也许这是个千人千面的话题,每个工程师都有自己的理解.比如我,从一个天天被骂代码写得烂 ...

  6. 《Clean Code》一书回顾

    <Clean Code>一书从翻开至今,已经差不多两个月的时间了,尽管刨去其中的假期,算下来实在是读得有点慢.阅读期间,断断续续的做了不少笔记.之前,每每在读完了一本技术书籍之后,其中的诸 ...

  7. Clean Code之JavaScript代码示例

    译者按: 简洁的代码可以避免写出过多的BUG. 原文: JavaScript Clean Code - Best Practices 译者: Fundebug 本文采用意译,版权归原作者所有 引文 作 ...

  8. 【笔记】Clean Code(持续更新)

    这个暑假出来实习,第一次体会到在一个团队中开发的体验,与网上的网站看到的大为不同,以前看网上说什么程序员写了屎山代码,写了一堆模糊的注释或者说垃圾代码不写注释. 但在我的实习体验中,代码虽然看起来很多 ...

  9. Clean Code 笔记 之 第二章

    你是否真正的会命名 前言 这是我第二次看这本书了(Clean Code)的时候,第一次看的时候是,看到某世界五百强在他们的代码中我竟然看不到一句注释,现在我还记得当时的情景,当我Download 下第 ...

随机推荐

  1. mongodb c++ driver安装踩坑记

    安装教程:https://mongodb.github.io/mongo-cxx-driver/mongocxx-v3/installation/ (1) “initializer_list” fil ...

  2. 后台while收发过程

    fuse_loop_mt.c 中fuse_do_work函数使用while循环在后台不断运行,每一个while循环中,主要有两个操作. 1. fuse_session_receive_buf(mt-& ...

  3. [SHOI 2013] 发微博

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=4419 [算法] 用std :: set维护每个人的好友集合 当两人成为好友时将每人接 ...

  4. AES加密算法(C++实现,附源码)

    原创作品,转载请注明出自xelz's blog 博客地址:http://mingcn.cnblogs.com/ 本文地址:http://mingcn.cnblogs.com/archive/2010/ ...

  5. 《算法概论》第八章的一些课后题目 关于NP-Complete Problem

    8.3 STINGY SAT STINGY SAT is the following problem: given a set of clauses (each a disjunction of li ...

  6. FINDSTR 命令使用详解

    Findstr 使用正则表达式搜索文件中的文本模式. 语法 findstr [/b] [/e] [/l] [/r] [/s] [/i] [/x] [/v] [/n] [/m] [/o] [/p] [/ ...

  7. 设计模式-策略模式---Strategy(对象行为型)

    策略模式 1.概念 分别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于使用算法的客户. 2.代码实现:(模拟鸭子应用)https://git.oschina.net/ipnunu/Desi ...

  8. 考拉定时任务框架kSchedule

    此文已由作者杨凯明授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 1.背景 目前项目中使用的定时任务框架存在下面这些问题 没有统一的定时任务管理平台 目前项目中使用定时任务的 ...

  9. 51 nod 1521 一维战舰(二分)

    传送门 题意 分析 这是我在51nod上的第2题,下载了4个数据,得不偿失?我太菜啦 一开始wa了6个点,下数据后发现舰与舰不能相邻,再交wa,发现l和r都没设好,再wa,发现check里面[1,b[ ...

  10. hdoj5115【区间DP·基础】

    题意: 有n头wolf排成一排,杀一头wolf回受到受到的伤害=它的本身a[i]+相邻两个b[i-1]+b[i+1].然后杀死第k个位置的wolf的话,k-1和k+1默认相邻(满足的话). 思路: 用 ...