阅读者(二十二):从重构到模式

2024-05-01 16:32

本文主要是介绍阅读者(二十二):从重构到模式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在谈论对《重构与模式》(Refactoring to Pattern)一书的认识之前,我想谈两点作为一个有近四年工作经验的软件从业人员在面向对象领域的一些困惑:

  • 重构的困惑:随着重构技巧的不断实践,诸如重命名、提取函数、搬移函数、内联、改变函数参数等技巧已经掌握得很熟练,然而一些困惑也开始出现。经过长期实践发现,我能使用重构所做的改善基本停留在类的内部,很容易地处理一些常见的坏味道,但是很难上升到类与类之间这个层次。一旦上升到这个层次,思路变得不清晰,把控能力明显下降。我也曾跟一些同事交流,与我有差不多经验的同事都有类似的困惑。
  • 模式的困惑:读完《设计模式》以及《深入浅出设计模式》之后,了解了很多模式框架,进而知道了很多解决一些典型问题的最佳方案。但是应用起来只会照搬照套,很难做到恰到好处。甚至某些时候适得其反,引入一些不必要的复杂性。更糟糕的是,一旦学会一些模式之后,非常容易滥用。有些时候为了显示自己对模式的把握技高一筹,在代码中恨不得“无处不模式”。后来逐渐发现模式这个工具不是万能的,如果用错只会让代码变得奇怪,甚至不可理解。因而,如何恰到好处地运用模式一直困扰着我。

当我读完《重构与模式》的前言时,立即意识到此书是我寻觅良久的作品。因为作者开门见山地道明了本书的主旨,即将重构与模式结合,使用模式来改善既有设计。如果你也认为模式是对面向对象设计在特定问题域的最佳实践,那么使用它来构建类结构岂不是高屋建瓴?当然,在前言的“此书目的”中也清晰明了地指出了如何才能将重构与模式很好的结合,那就是使用“模式导向的重构改善既有代码设计”。

纵观整本书,结构十分清晰。首先回顾了重构和模式的基本概念,当然它们是本书的基石,同时给那些对于重构和模式缺乏了解的读者一个熟悉它们的机会。接着谈到了代码的坏味道,这也是很有必要的。如果都不清楚什么样的代码是不好的,改善就无从谈起,因为代码的坏味道是重构的起点。最后是本书的精髓,所谓的“干货”部分,即授予读者如何将模式与重构结合的利器。通过代码实例,结合前面提到的坏味道,讲解每种重构技法的具体操作步骤。

任何一本书的结构设计与章节组织,其作者往往基于少量因素考虑,无法兼顾广大读者的需求。鉴于本书的实际操作性极强,作者很贴心地从读者学习的角度出发,考虑实例间对同一个项目的引用关系,在第五章最后部分给出了一个学习这些重构技法的推荐顺序列表(表5-1)。具体到每个重构技巧的介绍模式跟Martin Folower《重构》一书基本类似,所以对于熟悉Martin著作的读者来说,读这本书有种似曾相识的感觉,很容易上手。从第六章开始都采用了如下组织结构:

  • 名称
  • 概要
  • 动机
  • 做法
  • 示例
  • 变体

我认为最有价值的是动机和做法这两部分,因为每个重构技法的理论指导都在这里了。特别是在动机部分,作者给出了此重构技法的优缺点。哲学的基本原理告诉我们任何事物都有两面性。有利有弊,给读者决定采用此重构方法时提供了具体的考量标准。

此外,在第四章《代码坏味》中,作者给出了一个表(表4-1)。此表列出了本书处理的12种代码坏味的27种重构手法。我想它的最大作用在于,当你日后遇到某种代码坏味而忘记重构方法时,可以充当一个快速查阅工具。同时,本章还针对每种坏味言简意赅地说明了它的定义以及带来的危害,并且给出了解决它的重构方法。

至于每个具体的重构技法,我认为最佳学习实践是根据表5-1建立工程项目,把每个重构技法按照作者的指示实际动手实践。强烈推荐使用Intellij Idea来操作,因为它提供了很好的重构功能。例如,作者在第十一章提到的几个重构方法,就可以选中需要重构的代码块,使用几个快捷键立马可以搞定。具体的说,比如提取参数,只需要选中需要提取为参数的变量,Ctrl+Alt+P,重构结束,所有调用此方法的地方都自动将参数值传入。当然,工具虽然能节约敲代码的时间,并保证正确性,但还是需要认真阅读作者所写的每个步骤,深入理解背后的原理。

本书的好我不需要再画蛇添足地说太多,因为推荐此书那些大牛们的华丽言辞已经无以复加。如果还是太抽象,我将给本书作序的软件行业泰斗,ThoughtWorks首席科学家——Martin Folower的赞誉摘抄如下:

正因为如此,如果说有什么人最合适写模式与重构之间的联系,那应该非Joshua莫属了。

个人觉得本书略显不足之处在于其中文译名,有点错失原作者的主要意图了。Refactoring to Pattens的目的在于使用重构工具,以模式为导向来改善既有代码设计。如果按照中文译名理解,感觉只是介绍重构和模式而已,没能体现上述意图。

无论如何,本书是一本难得的理论与实践兼顾的作品,对于掌握和深入理解模式导向的重构有非常实用的指导意义。


这篇关于阅读者(二十二):从重构到模式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/952141

相关文章

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子

SpringBoot如何通过Map实现策略模式

《SpringBoot如何通过Map实现策略模式》策略模式是一种行为设计模式,它允许在运行时选择算法的行为,在Spring框架中,我们可以利用@Resource注解和Map集合来优雅地实现策略模式,这... 目录前言底层机制解析Spring的集合类型自动装配@Resource注解的行为实现原理使用直接使用M

C#原型模式之如何通过克隆对象来优化创建过程

《C#原型模式之如何通过克隆对象来优化创建过程》原型模式是一种创建型设计模式,通过克隆现有对象来创建新对象,避免重复的创建成本和复杂的初始化过程,它适用于对象创建过程复杂、需要大量相似对象或避免重复初... 目录什么是原型模式?原型模式的工作原理C#中如何实现原型模式?1. 定义原型接口2. 实现原型接口3

大数据spark3.5安装部署之local模式详解

《大数据spark3.5安装部署之local模式详解》本文介绍了如何在本地模式下安装和配置Spark,并展示了如何使用SparkShell进行基本的数据处理操作,同时,还介绍了如何通过Spark-su... 目录下载上传解压配置jdk解压配置环境变量启动查看交互操作命令行提交应用spark,一个数据处理框架

Java实现状态模式的示例代码

《Java实现状态模式的示例代码》状态模式是一种行为型设计模式,允许对象根据其内部状态改变行为,本文主要介绍了Java实现状态模式的示例代码,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来... 目录一、简介1、定义2、状态模式的结构二、Java实现案例1、电灯开关状态案例2、番茄工作法状态案例

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

模版方法模式template method

学习笔记,原文链接 https://refactoringguru.cn/design-patterns/template-method 超类中定义了一个算法的框架, 允许子类在不修改结构的情况下重写算法的特定步骤。 上层接口有默认实现的方法和子类需要自己实现的方法

【iOS】MVC模式

MVC模式 MVC模式MVC模式demo MVC模式 MVC模式全称为model(模型)view(视图)controller(控制器),他分为三个不同的层分别负责不同的职责。 View:该层用于存放视图,该层中我们可以对页面及控件进行布局。Model:模型一般都拥有很好的可复用性,在该层中,我们可以统一管理一些数据。Controlller:该层充当一个CPU的功能,即该应用程序

迭代器模式iterator

学习笔记,原文链接 https://refactoringguru.cn/design-patterns/iterator 不暴露集合底层表现形式 (列表、 栈和树等) 的情况下遍历集合中所有的元素

《x86汇编语言:从实模式到保护模式》视频来了

《x86汇编语言:从实模式到保护模式》视频来了 很多朋友留言,说我的专栏《x86汇编语言:从实模式到保护模式》写得很详细,还有的朋友希望我能写得更细,最好是覆盖全书的所有章节。 毕竟我不是作者,只有作者的解读才是最权威的。 当初我学习这本书的时候,只能靠自己摸索,网上搜不到什么好资源。 如果你正在学这本书或者汇编语言,那你有福气了。 本书作者李忠老师,以此书为蓝本,录制了全套视频。 试