大话重构读书笔记——进阶篇二

我们怎样拥抱变化

软件系统应对快速变化的终极利器,是以领域模型为核心建立的软件架构。

软件发展的基本特征就是变更,不论是源于需求的变更还是源于技术的变更。

运用领域模型,通过图形化的分析,可以让我们快速掌握真实世界的规律,进而指导软件的设计与开发。领域模型是联系真实世界与软件世界的枢纽,首先通过对真实世界的分析绘制领域模型,然后照着领域模型设计软件,就可以保证真实世界与软件世界的对应关系。

一般来说,领域模型是基于用户业务领域知识的分析,这些领域知识源于用户对软件系统的业务需求,却超越了业务需求。

领域模型,就是我们在逐渐学习和掌握用户的业务领域的过程中,将业务领域中的相关业务规则,以图形化的方式抽象成模型,方便我们日后的学习和交流。

基于领域模型的分析过程是一个科学的分析过程,它有它的一套科学的方法。通过这些方法才能保证我们分析的正确性。两种领域分析方法:原文分析法与领域驱动设计。

原文分析法(Textual Analysis),是在用例分析的基础上进行的业务领域分析,是一项在需求研讨会后整理和分析需求的工作。采用原文分析法之前我们首先就应当将业务需求整理成用例模型,为每个用例编写用例说明,之后对用例说明中事件流的文字描述进行原文分析。

领域模型是一种图形化的模型,既然是图形化的,就非常容易交流,为各方面的人员所接受。领域模型脱离技术,纯粹站在业务领域的角度进行探讨与交流。它采用类图的方式在描述业务的问题。

作为一个系统架构师,应当考虑一个足够合理的折中,以最大限度满足各方的需求。

先熟悉整个系统,然后是某个模块,之后是某个功能,再然后是你要修改的某个分支,最后到某段代码。慢慢地,你开始将分析的工作由业务功能向代码实现上细化。不要一行一行地读代码,那样效率很低。一个函数一个函数地去阅读,如果明白了某个函数的作用,甚至可以不用去阅读函数的内容。

快速阅读代码的另一个十分有效的方法就是重构。运用重构的方法去分解系统,以支持你对系统代码的理解,是非常有用的。

领域模型的绘制体现的是你对业务系统相关业务的认知程度,最初可能是肤浅的,甚至还会有错误。但没有关系,它代表了你再一步一步积极地学习。

测试的困境

自动化测试不是银弹,它不能解决测试过程中所有的问题。它不能测试与web容器密切相关的程序,也不能测试与数据库密切相关的代码。因此,我们不能因为追求覆盖率而盲目地编写自动化测试程序。

我们建立自动化测试的目的是:为了在日后的重构过程中不会让这些既有功能出错。

建立自动化测试体系:

  起初,我们首先建立起基于QTP的自动化测试,让原有程序都能测试通过,接着开始重构。随着重构工作的逐渐进行,业务程序逐渐与web容器和数据库解耦,可以开始编写基于单元测试框架的自动化测试程序。

系统重构的评价

超大函数的数量就是第一个评价指标,无所不能的大对象也不失为一个客观的评价指标,因此,评价一流系统中大对象的数据,是第二个评价指标,系统代码的复用率,代码依赖度。

时间: 2024-08-28 23:52:43

大话重构读书笔记——进阶篇二的相关文章

大话重构读书笔记——进阶篇一

什么时候重构? 重构是一种习惯,一种编程习惯.这种习惯让我们迅速由菜鸟转变为大牛,可以编写出高质量.优秀的程序. 问题的关键就是降低修改成本与风险的方法,而这个方法就是系统重构. 走出重构的第一步对每一个人来说都是一次心灵的考验,甚至许多人总是徘徊于路口踌躇不前,但一旦跨出去了,它将成为你生命的一部分. 没有经过重构的,原生态的代码是没办法复用的,当我们发现代码需要复用时,切忌不要使用过去那种简单粗暴的复制黏贴,合理运用重构方法,加之以仔细.认真.即时的测试,就可以保证既有代码的正确,并使整个系

大话重构读书笔记——实践篇二

第三步:提高代码复用率 经过重构的第一步,我们将令人头疼的大函数分解成了大小适中的一个个小函数,经过重构第二步,我们将无所不能的大对象拆分成了功能内聚的一个个小对象.随后,我们需要考虑的问题就是优化我们的代码了. 1. DRY原则:Don't Repeat Yourself. 2. 如何识别相似或相近功能? a. 处理同一流程中某个环节而采用的不同方式,如购物付款方式不同,但结果相同,此时,可将付款结果合并成一个类或方法,将不同的付款流程抽象成一个接口下的多个实现类. b. 在不同业务中某个功能

【Effective C++读书笔记】篇二(条款02~条款04)

条款02:尽量以 const,enum,inline 替换 #define #define PI 3.14 1)对于这样的宏定义,PI 在编译之前被预处理器全部换成了 3.14,所以 PI 也许并不会进入符号表(symbol table),当运用此常量发生编译错误时,错误信息也许会提到 3.14 而不是 PI ,此时不知道此宏定义的程序员就可能会产生困惑. 解决方法是用 const : const dobule Pi = 3.14; 2)其次,定义不好的宏会让人痛苦不堪.例如: #define

大话重构读书笔记——实践篇一

第一步: 从分解大函数开始 1. 什么是大函数? 大函数就是那些业务逻辑特别复杂.程序代码特别多.一提起来就让人头疼不已的超级方法.超级大函数很难让人读懂,更难于维护与变更,毫无疑问是软件退化的重灾区. 2. 如何解决超级大函数问题? 最有效的办法就是分解,按照功能一步一步分解,还原其应有的优化结构.这个过程我们常用的方法叫“抽取方法”.重构是一个探索的过程. 3.抽取方法: a. 将代码原子化时,为该函数取个易懂的名称.起初我们对这段代码的理解可能不那么深,因此往往选择用结果变量为其命名,随着

大话重构读书笔记——保险索下的系统重构

1. 保险索是什么? 保险索就是每次重构后正确的测试方法. 2. 什么是程序代码正确的测试方法? 在不同的场景标准是不一样的.但与其他测试不同,系统重构在测试代码正确性方面有自己独特的方法,那就是不改变软件外部行为. 3. Mock 在测试过程中,对于某些不容易构造或不容易获取的对象,用一个虚拟对象来替代以使测试得以继续的方法 4. 自动化测试不是银弹,不是所有代码都适合自动化测试: a. 与web容器或其他设备驱动相关的代码是不适合自动化测试的,因为我们在测试的时候不希望去启动web容器或其他

《如何变得有思想》读书笔记 - 创业篇

<如何变得有思想>读书笔记 - 创业篇 创业时产品的方向选择 创造一个有竞争力的新产品,不要着眼于它的功能比别人多,而要着眼于它有一个截然不同的市场定位. 如果市场上都是复杂的企业级工具,那就开发一个针对个人用户的简化版:如果市场上都是很正式的高端葡萄酒,那就开发一种便宜的.针对年轻人的.更休闲的酒精饮料:如果市场上都是提供长篇Blog服务的网站,那就开发一个很简单的.每次只能写140个字的网站:如果市场上都是技术性的.廉价的电子设备,那就开发人性化的.高价的电子设备. 总之,你要做的不是添加

《javascript权威指南》读书笔记——第二篇

<javascript权威指南>读书笔记--第二篇 金刚 javascript js javascript权威指南 今天是今年的196天,分享今天的读书笔记. 第2章 词法结构 2.1 字符集 JavaScript程序是用Unicode字符集编写. Unicode是ASCII和Latin-1的超集,支持几乎所有语言. ES3 要求支持Unicode 2.1及后续版本 ES5 要求支持Unicode 3及后续版本 2.1.1 区分大小写 JavaScript是区分大小写的. HTML 并不区分大

《javascript权威指南》读书笔记——第一篇

<javascript权威指南>读书笔记--第一篇 金刚 javascript js javascript权威指南 由于最近想系统学习下javascript,所以开始在kindle上看这本书来补充下. 今天是今年的196天,由于我之前承诺过,每天分享读书笔记,只是之前分享的是大众读物,所以随手分享到kindle阅读群里了.但是现在读的是技术类书籍,分享到kindle读书群不太合适,所以还是以博客的形式分享.这样子,一个链接,大家感兴趣了就点开看看,不感兴趣了,就不点开. 其实这篇文章应该是昨天

Vue学习笔记进阶篇——Render函数

本文为转载,原文:Vue学习笔记进阶篇--Render函数 基础 Vue 推荐在绝大多数情况下使用 template 来创建你的 HTML.然而在一些场景中,你真的需要 JavaScript 的完全编程的能力,这就是 render 函数,它比 template 更接近编译器. <h1> <a name="hello-world" href="#hello-world"> Hello world! </a> </h1>