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

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

相关文章

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

利用命令模式构建高效的手游后端架构

在现代手游开发中,后端架构的设计对于支持高并发、快速迭代和复杂游戏逻辑至关重要。命令模式作为一种行为设计模式,可以有效地解耦请求的发起者与接收者,提升系统的可维护性和扩展性。本文将深入探讨如何利用命令模式构建一个强大且灵活的手游后端架构。 1. 命令模式的概念与优势 命令模式通过将请求封装为对象,使得请求的发起者和接收者之间的耦合度降低。这种模式的主要优势包括: 解耦请求发起者与处理者

springboot实战学习(1)(开发模式与环境)

目录 一、实战学习的引言 (1)前后端的大致学习模块 (2)后端 (3)前端 二、开发模式 一、实战学习的引言 (1)前后端的大致学习模块 (2)后端 Validation:做参数校验Mybatis:做数据库的操作Redis:做缓存Junit:单元测试项目部署:springboot项目部署相关的知识 (3)前端 Vite:Vue项目的脚手架Router:路由Pina:状态管理Eleme

状态模式state

学习笔记,原文链接 https://refactoringguru.cn/design-patterns/state 在一个对象的内部状态变化时改变其行为, 使其看上去就像改变了自身所属的类一样。 在状态模式中,player.getState()获取的是player的当前状态,通常是一个实现了状态接口的对象。 onPlay()是状态模式中定义的一个方法,不同状态下(例如“正在播放”、“暂停

软件架构模式:5 分钟阅读

原文: https://orkhanscience.medium.com/software-architecture-patterns-5-mins-read-e9e3c8eb47d2 软件架构模式:5 分钟阅读 当有人潜入软件工程世界时,有一天他需要学习软件架构模式的基础知识。当我刚接触编码时,我不知道从哪里获得简要介绍现有架构模式的资源,这样它就不会太详细和混乱,而是非常抽象和易

使用Spring Boot集成Spring Data JPA和单例模式构建库存管理系统

引言 在企业级应用开发中,数据库操作是非常重要的一环。Spring Data JPA提供了一种简化的方式来进行数据库交互,它使得开发者无需编写复杂的JPA代码就可以完成常见的CRUD操作。此外,设计模式如单例模式可以帮助我们更好地管理和控制对象的创建过程,从而提高系统的性能和可维护性。本文将展示如何结合Spring Boot、Spring Data JPA以及单例模式来构建一个基本的库存管理系统