最近的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. I.MX6 不一定要设置BOOT_MODE进入烧录模式

    /************************************************************************* * I.MX6 不一定要设置BOOT_MODE进入 ...

  2. 「LuoguT36048」 Storm in Lover

    Description 平成二十四年(2012年),5月11日,东京,某弓道场. "呐,呐,海未酱,你听说了吗?几天后的那场弓道大会?啊-!"橙发少女兴奋地拿着一张传单一样的纸跑向 ...

  3. 洛谷 P1337 平衡点 & bzoj 3680 吊打 XXX —— 模拟退火

    题目:https://www.luogu.org/problemnew/show/P1337 https://www.lydsy.com/JudgeOnline/problem.php?id=3680 ...

  4. Android Studio手动下载配置Gradle的方法

    1 问题 (1) android sutdio第一次打开一个工程巨慢怎么办? (2) 手动配置Gradle Home为什么总是无效? (3) 明明已经下载了Gradle,配置了gradle home, ...

  5. 【旧文章搬运】Windbg+Vmware驱动调试入门(三)---Windbg基本调试入门

    原文发表于百度空间,2009-01-09========================================================================== 这一节的内 ...

  6. Start Developing Mac Apps -- Human Interface Design 用户界面设计

    Human Interface Design It’s not enough to create an app that works. Users expect Mac apps to be powe ...

  7. 关于 GraPhlAn 的孤独自学

    最近需要用 GraPhlan 来绘制 taxo分类图,稍微研究了一下 一.简介 官网: http://huttenhower.sph.harvard.edu/GraPhlAn 主要有两个脚本: gra ...

  8. SCUT - 243 - 宝华复习 - 二分 - 桶计数

    https://scut.online/p/243 这道题唯一难点在于如何快速确定m合法.可以统计滑动窗口中已有元素的数量. #include<bits/stdc++.h> using n ...

  9. 基于FBX SDK的FBX模型解析与加载 -(一)

    http://blog.csdn.net/bugrunner/article/details/7210511 1. 简介 FBX是Autodesk的一个用于跨平台的免费三维数据交换的格式(最早不是由A ...

  10. Codeforces 1108F(克鲁斯卡尔的理解)

    最小生成树会多样的情况是:两个或多个边等长且连通同样的两个并查集块. 所以可以跑一遍克鲁斯卡尔,每次把当前等长的边数出来,注意不要边找边并查,因为有一部分边是正常跑生成树我们也不会要他的,这种直接跳了 ...