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

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

相关文章

Redis Cluster模式配置

《RedisCluster模式配置》:本文主要介绍RedisCluster模式配置,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录分片 一、分片的本质与核心价值二、分片实现方案对比 ‌三、分片算法详解1. ‌范围分片(顺序分片)‌2. ‌哈希分片3. ‌虚

RabbitMQ工作模式中的RPC通信模式详解

《RabbitMQ工作模式中的RPC通信模式详解》在RabbitMQ中,RPC模式通过消息队列实现远程调用功能,这篇文章给大家介绍RabbitMQ工作模式之RPC通信模式,感兴趣的朋友一起看看吧... 目录RPC通信模式概述工作流程代码案例引入依赖常量类编写客户端代码编写服务端代码RPC通信模式概述在R

SQL Server身份验证模式步骤和示例代码

《SQLServer身份验证模式步骤和示例代码》SQLServer是一个广泛使用的关系数据库管理系统,通常使用两种身份验证模式:Windows身份验证和SQLServer身份验证,本文将详细介绍身份... 目录身份验证方式的概念更改身份验证方式的步骤方法一:使用SQL Server Management S

Redis高可用-主从复制、哨兵模式与集群模式详解

《Redis高可用-主从复制、哨兵模式与集群模式详解》:本文主要介绍Redis高可用-主从复制、哨兵模式与集群模式的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录Redis高可用-主从复制、哨兵模式与集群模式概要一、主从复制(Master-Slave Repli

一文带你搞懂Redis Stream的6种消息处理模式

《一文带你搞懂RedisStream的6种消息处理模式》Redis5.0版本引入的Stream数据类型,为Redis生态带来了强大而灵活的消息队列功能,本文将为大家详细介绍RedisStream的6... 目录1. 简单消费模式(Simple Consumption)基本概念核心命令实现示例使用场景优缺点2

Nginx location匹配模式与规则详解

《Nginxlocation匹配模式与规则详解》:本文主要介绍Nginxlocation匹配模式与规则,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、环境二、匹配模式1. 精准模式2. 前缀模式(不继续匹配正则)3. 前缀模式(继续匹配正则)4. 正则模式(大

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,一个数据处理框架