refactoring Patterns(四):困难

【YOLOv12[基础]】热力图可视化实践 | 脚本升级 | 优化可视化效果 | 论文必备 | GradCAMPlusPlus, GradCAM, XGradCAM, EigenCAM等 热力图可视化实践 | 脚本升级 | 优化可视化效果 | 论文必备 GradCAMPlusPlus, GradCAM, XGradCAM, EigenCAM等 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> 任何一种技术都不是万能的。正象设计模式,合理的运用可以极大地提高设计的效率和美感,再不适当的场合运用就会产生所谓的反模式。我们的refactoring亦然。但是,作为一种强有力的设计演变工具,refactoring值得我们付出努力。不能因为对新技术的恐惧而放弃这样的工具,我在这里对可能出现抗拒情绪的一些问题进行了解释。不应 Refactoring 的场合 程序原型 当你原型化一个系统时,你通常不在乎程序的灵活性和效率。原型的目的仅仅是为了证明一个概念、实现一种探索,加快加深与客户的交流。一旦原型完成,这样的代码就应该丢掉,重新开始正确的编写。但是,一旦原型能够起到演示的作用,继续保留它并按照这样的方式一直实现下去的诱惑将很难抵挡。你会说:"程序运行的很好,就用这一个吧!"。从原型开始的目的来看,这样的策略最后是不会成功的。所以Foote甚至说: 要最小化这种将原型直接变为产品的风险,一个办法就是选用一种特定的语言或工具来构建你的原型,而你绝不会使用这种语言或工具完成你的最终产品。 由于原型从根本来说,不会有意考虑以后的变化和程序的结构,对原型做Refactoring是不可能也是毫无必要的。 程序不能工作 如果一个程序本身还不能工作,那么对他进行Refactoring就没有任何意义。Refactoring保留程序的可观察行为,那么Refactoring的结果还是不能正常工作的。 这里并不排除使用Refactoring可以排除bug,但那是在程序的绝大部分主要功能已经实现的情况下。 接近底线 如果你已经接近了最后提交日期,这个时候Refactoring可能产生的效率的提高将发生在底线之后。到那时候,一切都没有意义了。 但是这个问题可以有另外一种考虑的思路,为什么会出现这种情况?是因为估算严重失误还是因为效率太低?如果效率太低,你怎样来提高效率?Refactoring是一种提高生产力极好的方法,因为它使设计更好,从而使得变化更快。所以,如果你发觉时间可能不够,往往就是需要Refactoring的一个信号 实施 Refactoring 可能碰到的阻碍以及解决方案 Refactoring带来的长期利益是每个人都能够看到的,但是并不是每个人都愿意使用它,Opdyke说: 因此,这类技术的支持者可能会惊异于(失望于)这个世界没有人来敲他们的门。 接着,他指出即使已经意识到长期的利益,但人们还是不情愿使用这种方法的四个关键理由: "我不理解如何应用你的方法 。" "你的方法只能得到长远利益,为什么要在现在竭尽努力?从长远的角度来看,我可能不再是这个项目或这个组织的一员了" "你的方法是一种开销活动,我是受雇来编写新特性的" "如果我们应用了你的方法,我们已有的实现可能以不刻预期的方式变化或中断。可性度和向后兼容性对我们很重要". 这些问题其实并不单单存在于Refactoring领域,在鼓励人们设计、编写更重用的系统时,我们也必须解决这些问题: 技术人员可能不理解重用什么以及如何重用; 如果不能看到短期效益,技术人员不会采用提倡重用的方法。 我们必须明确支持重用的方法可能引发的额外学习曲线和其他成本。 采用支持重用的方法不应该打断一个项目;新的实现应当和存在的系统向后兼容。 学习 要想知道如何refactoring,你必须学习。 Refactoring已经被有经验的OO程序员成功地使用了10多年。这些程序员也把他们Refacorting的经验反馈给了OO社团。 本文旨在为你提供一个导引,在学习了这篇文章后,你可以沿着以下几个方向进行深入: 要立刻开始动手进行Refactoring,你的最佳选择就是Martin Fowler的《Refactoring: Improving the Design of Exsiting Code》,该书有一个Refactoring的分类目录。详细描述了70多种Refactoring方法。Martin Fowler的主页(http://www.martinfowler.com)上还有最近扩展的一些Refactoring方法。 你需要阅读各种好的程序代码和设计结构,特别是设计模式,因为设计模式可以称得上Refactoring的终极目标之一。 你可以到网上搜索各种Refactoring工具,我将在后面介绍,学习使用Refactoring工具进行更安全的Refactoring。 如果你想学习Refactoring方面的理论,请参见我文后附上的各种参考文献,特别是Ralph Johnson教授的文章和他弟子们的博士论文。 另外,在我的主页www.erptao.org上,你可以: 对本文提出评论和建议,以帮助我改进; 在论坛中有refactoring方面的讨论,你可以在那里看到refactoring的一些实践,如果你有问题,可以在那里提出,我将尽量回答。 Refactoring获得短期效益 如果没有短期效益,很难让技术人员直接看到Refactoring的效果。由于Refactoring开始于大学的研究机构和技术前沿的小公司,所以如何在工业主流软件中应用Refactoring成为OO社团实践的一个重要内容。 伊利诺斯大学研究小组的CHOISE操作系统框架是这些研究的一部分。其中,CHOICE实现了对System V,MS-DOS,BSD UNIX等差别极大的不同文件系统的支持。在开发过程中应用Refactoring后,研究者指出refactoring确实能够获得不少短期和长期的利益。 对于近期而言,因为排除了重复代码,在通用代码测试中发现的错误只需要在一个地方进行修改。代码总量变小。与一个特定文件系统格式相关的代码与适合于两个或几个文件系统通用的代码隔离。 对于中期而言,来自于refactoring的抽象通常为以后其他的文件系统提供了方向。事实上,对两个现有文件系统的抽象不一定完全适合于第三个文件系统,但是已经存在的通用代码是一个有价值的起点。后续refactoring应用的结果将显示什么是文件系统真正的抽象。框架开发小组发现,随着实践的推移,加入一个文件系统所需要的努力越来越少。即使后来的文件系统更复杂,开发者更加缺乏经验。 削减Refactoring的额外开销 对于Refactoring所造成的额外开销,你可以这样来看待: 工具和技术的发展使得refactoring更加自动化,能够减少大量的手工劳动和错误介入; 有经验的OO程序员报告,refactoring所造成的额外开销完全能够抵消采用refactoring对程序开发其他阶段的提升。 刚刚开始使用refactoring,你可能会觉得有点别扭。但一旦成为一种习惯,你将不会觉得这是一种额外工作,你会把它当作一个好程序员开发过程自然而然的一部分。 你可以在internet上找到很多这样的报告,后面很多内容也都谈到了这个问题。 安全Refactory 保持可观察的行为被称为Refactoring的安全性。要实现安全的Refactoring,你通常有几种选择[William Opdyke]: 相信你自己的编码能力; 相信专家、文献提供的步骤能够帮助你减少错误。 相信编译器能够捕获你没有发现的错误; 相信你的测试套件能够捕获编译器没有发现的错误; 相信Code Review会捕获你、你的编译器、你的测试套件漏掉的错误 各种各样的书籍、资料、论文、期刊可以增强你的编程能力,能够教给你更多的良好风格。Martin Fowler的《Refactoring》就是这样一本书,他告诉我们Refactoring有非常细小的一步一步组成,每一步看起来都不起眼,但是一系列Refactoring的结果会对系统产生有力的影响。 编译器、好的风格、测试套件、Code Review都是非常有价值的,但是所有这些方法方法都有他们的问题,编译器根本不知道程序的动态行为,好的风格、Code Review完全依靠人来实现,而任何一个人都会犯错误。测试套件也没有办法覆盖所有的行为。 所以,面向软件社团对Refactoring的一个重要研究方向,就是定义Refactoring安全性方面的理论并实现这种理论支持下的工具。它们可以用来检查某一种Refactoring是否能够安全地应用到一个程序,如果安全的话,那么就有工具来完成Refatoring。这样做也避免了手工完成可能引起的bug。 关于作者 石一楹,现任浙江大学灵峰科技开发公司技术总监。多年从事OO系统分析、设计。现主要研究方向为Refactoring和分析模式。你可以通过shiyiying@hotmail.com和我联系。
 

代码太容易变坏,重复代码随处可见,特别是那些初看相似细看又不同的

代码泛滥于整个系统:

条件表达式,循环结构、集合枚举.....信息被共享于系统一些关系甚少的

组成部分之间,通常,这使得系统中几乎所有的重要信息都变成全局或者重复。

解决这个问题的最好办法当然是让它不要发生。然而,要阻止代码的腐化,

你需要付出额外的代价。每次在修改或增加代码之前,你都要看一看手上的这些代码。

如果它很好的话,那么你应该能够很方便地加入新的功能。如果你需要花很长的时间

去理解原来的代码,花更长的时间去增加和修改代码。

那么,先放下手里的活,让我们来做 Refactoring。 



一.Refactoring 介绍 

二.Refactoring 理由 

三.Refactoring 问题 

四.Refactoring 困难 

五.Refactoring 方法 

六.Refactoring 与软件设计 

七.Refactoring 场合与命名规则 



中文JAVA技术网重新整理发布

【AI大模型应用开发】3.2 RAG实战 - RAG应用+UI实现加载本地文件并对话 前面我们实现了RAG基本流程,今天我们在此基础上给它加个UI界面,在浏览器打开,实现上传本地文件、解析,并用大模型实现与该文档的对话。也就是一个阉割版demo版的ChatPDF或知识库对话系统。 阅读详情

相关推荐

Win11家庭版彻底关闭Hyper-V的3种方法(实测有效)

本文详细介绍了Win11家庭版彻底关闭Hyper-V的3种实测有效方法,解决与VMware的兼容性问题。包括命令行禁用虚拟化功能、微软官方工具DG_Readiness深度清理以及组策略与功能组件联用方案,帮助用户高效禁用Hyper-V并优化系统性能。

weixin_33728268的博客 2687

真专家其实是热情、厚道的

每次回杭州总能有很多收获,这次尤甚,感谢博文视点周筠老师在会议开始的前几天提供会议信息,使我得以成行。 见到“真正的技术大会” 参加过很多技术大会,但大都是由厂商主导,比如IBM的DW大会,MS的TechED,BEA的eWorld等,并不是说这些会议不好,而是说其内容难免会染上太多厂商的味道,失却些中立性。所以阿里巴巴这次能安排这么大、非盈利的大会,确实让人振奋。怀着一种美好的愿望来揣测马

编辑空间 2905

目标检测: 一文读懂 YOLOX

论文:YOLOX: Exceeding YOLO Series in 2021 论文链接:https://arxiv.org/pdf/2107.08430.pdf 代码链接:https://github.com/Megvii-BaseDetection/YOLOX. 文章目录1 为什么提出YOLOX2 YOLOX 网络架构3 YOLOX 实施细节3.1 backbone3.2 neck3.3 Head3.3.1 Decoupled Head3.3.2 Anchor-free3.4 如何计算Loss3.5 如

weixin_46142822的博客 3万+

重构模式4

refactoring Patterns:第四部分 内容:不应 Refactoring 的场合实施Refactoring可能碰到的阻碍以及解决方案学习Refactoring获得短期效益削减Refactoring的额外开销安全

xxcc的专栏 1448

BUPT软件安全实验三

可以看出栈溢出对程序运行的安全性有很大的威胁,如果不对栈进行保护,只要系统中存在栈溢出漏洞,即可令攻击者通过非正当方法获取操作权限。(6)解决思考题,即:在不修改StackOverrun程序源代码的情况下,构造shellcode,通过JMP ESP的方式实现通过记事本打开shellcode.txt(可使用CreateProcessA或WinExec等API)。查看缓冲区信息,可以看到dest指向地址0x0012FAF0,其为数组的存放起始位置,也就是shellcode注入的起始位置。

7xun's space 1966

固定时间收敛的控制器设计(基础知识)

针对控制系统的有限时间收敛和固定时间收敛给出一些常用定理。

qq_40241332的博客 1万+

杭州ERPTAO组织成功举办第一次技术讲座

2004年2月28日,在浙江大学软件学院和优快云网站的大力支持下,ERPTAO组织在浙大成功地举办了第一次软件技术讲座。有上百名专业软件开发者及爱好者到场参加,两位主讲人熊节(也就是我本人)和石一楹为大家送上了关于重构思想及O/R mapping技术的演讲,现场气氛相当热烈。稍后我们会按照签到表上的email地址给到场听众发送今天的讲义及相关资料,并在网上提供下载。今后我们会不定期地经常举行

透明思考@优快云 2511

保姆级教程:用Python+MM-Agent搭建自己的数学建模AI助手(支持GPT-4o/DeepSeek)

本文提供了一份详细的教程,教你如何使用Python和MM-Agent框架搭建数学建模AI助手,支持GPT-4o和DeepSeek-R1等LLM后端。从环境配置、HMML知识库集成到多LLM适配和建模流程实现,手把手教你构建智能建模系统,提升数学建模效率。

k6l7m8n9的博客 452

重构模式5

refactoring Patterns:第五部分 内容:增量迭代Moving Target拥抱变化-Refactoring和XP参考资料关于作者相关内容:该系列的其他部分

xxcc的专栏 1284

揭秘AI人工智能中Stable Diffusion的模型微调技巧

Stable Diffusion作为一种强大的文本到图像生成模型,在艺术创作、设计、娱乐等多个领域展现出了巨大的应用潜力。然而,其默认的模型输出可能无法满足特定用户或特定场景的个性化需求。本文章的目的在于深入揭秘Stable Diffusion的模型微调技巧,让读者能够根据自己的需求对模型进行定制化调整,生成符合特定风格、主题或要求的图像。范围涵盖了从基础概念到实际操作,从理论原理到项目实战的全方位内容,旨在为读者提供一个系统且深入的学习指南。

大模型应用工坊 950

团体程序设计天梯赛竞赛题--登顶题【L3-039 攀岩】

登顶级 3 道题,每道题 30 分,满分为 90 分。

Pretty Boy Fox的博客 654

Role分析模式(二)角色对象创建和管理

概要Role Object(一)提出对解决Role问题的基本方法,但是我们还有许多问题需要深入,这些问题包括如何创建具体的Role实例,如何管理这些角色并实现角色之间的约束。 Role Object提出了对解决Role问题的基本方法,但是我们还有许多问题需要深入,其中的一个问题是如何创建具体的Role实例。动机对Role的创建有几个基本的需求。前面我们使用角色的名字作为Specification来

ivanlovetracy::伊凡::的专栏 1894

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【重构获得模式 Refactoring to Patterns】

现代软件设计的特征是“需求的频繁变化”。设计模式的要点是“寻找变化点,然后在变化点处应用设计模式,从而更好地应对需求的变化”。“什么时候、什么地点应用设计模式”比“理解设计模式结构本身”更为重要。

代号1998的专栏 1538

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

refactoring Patterns:第二部分

refactoring Patterns:第二部分为什么要 Refactoring  为什么要去改变已经可以正确运行的软件?这样的改变是否影响到我们的设计,从而进一步改变我们对于面向对象系统进行设计的方法和思路?本部分试图回答这些问题。Refactoring虽然需要更多的"额外工作",但是它给我们带来的各种好处显然值得我们做出这样的努力:简化测试一个好的Refactoring实

flyelf的专栏 966

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

refactoring Patterns:第三部分

本文紧接第二部分,继续讲述应用 refactoring 应该考虑的问题。任何一种技术都可能有它自己的麻烦。但是往往在我们使用一种新技术的时候,可能还不能深入到发现它带来的问题,正如Martin Fowler所说:在学习一种能够极大提高生产力的新技术时,你很难看到它不能应用的场合。他把Refactoring的情景和面向对象出现使得情景相比较:情况恰如10年前的对象。不是我不考虑对象有限制。只

flyelf的专栏 1040

refactoring Patterns:第一部分

refactoring Patterns:第一部分       这是关于refactoring思考的第一部分内容。本文将介绍refactoring的基本概念、定义,同时解释正确、安全进行refactoring需要坚持的几个原则介绍代码太容易变坏。代码总是趋向于有更大的类、更长的方法、更多的开关语句和更深的条件嵌套。重复代码随处可见,特别是那些初看相似细看又不同的代码泛滥于整个系统:条件表达

flyelf的专栏 1085

《Refactoring to patterns》

同学推荐的一本书,看完觉得挺不错的,作者的一个重要思想是应当在出现性能、复杂度较高难于维护等问题时,利用patterns对代码进行重构。和《Refactoring》一书类似,全书对于重构过程的描述非常细致,不同的是书中示例都是作者的经验结晶,重构过程浓缩着作者对于模式的深刻理解,读起来更为生动、自然。实践和理论相结合,是计算机这行必须遵循的一个原则,如果不能像书中所述那样细致的一步一步进行重构,就

飞光流影 1025

Refactoring Patterns (Second Part)

为什么要 Refactoring 石一楹 (shiyiying@hotmail.com)浙江大学灵峰科技开发公司技术总监2001 年 12 月为什么要去改变已经可以正确运行的软件?这样的改变是否影响到我们的设计,从而进一步改变我们对于面向对象系统进行设计的方法和思路?本部分试图回答这些问题。Refactoring虽然需要更多的"额外工作",但是它给我们带来的各种好处显然值得我们做出这样的努力:简化

glietpku的专栏 774

refactoring Patterns:第四部分

任何一种技术都不是万能的。正象设计模式,合理的运用可以极大地提高设计的效率和美感,再不适当的场合运用就会产生所谓的反模式。我们的refactoring亦然。但是,作为一种强有力的设计演变工具,refactoring值得我们付出努力。不能因为对新技术的恐惧而放弃这样的工具,我在这里对可能出现抗拒情绪的一些问题进行了解释。不应 Refactoring 的场合程序原型当你原型化一个系统时,你

flyelf的专栏 1046

refactoring Patterns第七部分

虽然refactoring几乎可以随时进行,然而,按照我们关于两顶帽子的原则,在某些场合下,refactoring的介入显得更加实际、有意义、富有成效。另外,在最后进入Refactoring实践之前,我把Kent Beck和Martin Fowler给我们的忠告和建议放在这里。这些内容,特别是Code Smell和命名规则不但对我们进行refactoring具有很强的实践意义。同时,他们也促使

flyelf的专栏 1005

Refactoring Patterns (First Part)

refactoring Patterns:第一部分内容:介绍什么是Refactoring?Refactoring原则参考资料关于作者相关内容:该系列的其他部分

天行健 ● 君子以自强不息 1317

refactoring Patterns

这是关于refactoring思考的第一部分内容。本文将介绍refactoring的基本概念、定义,同时解释正确、安全进行refactoring需要坚持的几个原则。 介绍 代码太容易变坏。代码总是趋向于有更大的类、更长的方法、更多的开关语句和更深的条件嵌套。重复代码随处可见,特别是那些初看相似细看又不同的代码泛滥于整个系统:条件表达式,循环结构、集合枚举….信息被共享于系统一些关系甚少的组成部分...

忆风 297

Refactoring Patterns (Seventh Part)

内容:Refactoring 应用的场合Refactoring和命名参考资料关于作者相关内容?lt;/B>该系列的其他部分Refactoring场合和基本命名规则 石一楹 (shiyiying@hotmail.com)浙江大学灵峰科技开发公司技术总监2001 年 12 月虽然refactoring几乎可以随时进行,然而,按照我们关于两顶帽子的原则,在某些场合下,refactoring的介入显得更加

glietpku的专栏 764

《重构与模式》(Refactoring To Patterns)中文版 JPG

http://www.verycd.com/topics/205321/

mowengaoboa的博客 389

refactoring Patterns第五部分

Refactoring不仅仅是一种编码的方法。他同时是一种设计方法。本文从软件工程学的演变来透视Refactoring的重要作用。同时,你也可以在这里看到Refactoring和最近出现的XP开发方法学的紧密关系。增量迭代自从有软件工程一说开始,大大小小出现了许多方法,其中一些还常常被我们挂在嘴边.这些软件方法中最著名的生命周期模型包括WaterFall,它是由Royce于1970年首先提出来

flyelf的专栏 1106

refactoring Patterns(三):问题

google_ad_client = "pub-8800625213955058";/* 336x280, 创建于 07-11-21 */google_ad_slot = "0989131976";google_ad_width = 336;google_ad_height = 280;//<script type="text/java

java专栏 747
上一篇: refactoring Patterns(二):为什么要 Refactoring
下一篇: refactoring Patterns(六):软件设计
java169
博客等级 码龄19年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值