refactoring Patterns(六):软件设计

STM32 ADC+DMA实战:手把手教你驱动XGZP6847A压力传感器(附完整代码) 本文详细介绍了如何使用STM32的ADC和DMA外设驱动XGZP6847A压力传感器,包括硬件连接、ADC配置、DMA高效传输实现以及数据处理与校准方法。通过实战案例和完整代码,帮助开发者快速掌握高精度压力数据采集技术,适用于工业控制和医疗设备等领域。 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> Refactoring是一种重要的设计辅助工具。特别地,他能够使得传统的up-front设计更简单,也可以改良现有软件的设计。本文阐述了在应用refactoring环境下设计应当具有的特点以及refactoring和OO社团最受人瞩目之一的设计模式之间的关系。 简化设计 为什么设计应当是简单的? 传统的软件方法偏向于进行一次性的Upfront设计,我们知道这很难。 软件方法学的设计者通常喜欢用建筑打比方。他们说,如果你要建造一座大厦,那么在你画完所有的施工图和建筑规范之前,你从来不应该开始真正施工。 我喜欢这样的比喻,因为建筑学的发展经历了几千年甚至可能是上万年,而软件行业,最多也只有5,60年的时间,我们需要从建筑中学习很多东西。就如模式语言的提出者,著名的建筑学家,Christopher Alexander ,给了设计模式很大的启发。 但是,如果我们只是从建筑学到东西,恐怕还是远远不够。我还不知道哪一栋大厦的外形能够发生变化,或者哪一个大商场在发现自动扶梯位置不太合适时,能够自由移动到一个更加合适的地方(我附近一家大超市的自动扶梯真的让我想到了这一点)。也许要部分达到这样的目的还是有可能的,但肯定要花费极高的代价。但是如果我们去构造一个企业的应用系统,那么我们必须准备好企业发展的同时需要对我们的软件做出改变。 软件的核心就是可变。这种变化不仅仅在于需求的变化,还在于人们理解的变化,而软件这种人活动的产物,必须要随之发生改变。 增量迭代的开发方法学是对软件变化的一种响应。但是正如我们前面所讲,增量迭代模型有可能对系统的设计提出比传统的Waterfall更复杂的要求。你需要预期所有可能的情形,然后才能保证你是可以增量的,也是能够迭代的。 这种两难的境地来源于一个基本的假设: 削减软件成本的最主要方法是减少返工的成本以及它的可能性。 传统的软件发法学认为,如果我能够尽量早地冻结需求,那么我修改设计的可能性和成本就越小,如果我的设计能够尽早地冻结,那么我修改实现的可能性和成本就越小。要想早早冻结设计,它必须是非常详尽而复杂的。 我把这种思路称为"改变恐惧症",不仅仅因为变化是最难研究的东西(制订出条条框框则简单的多),也因为我们没有足够的经验来适应变化,更重要的是,从来没有哪个时代比今天变化更快。 现在我们从另一个角度来想问题: 我们是否可能通过增加返工的方法来削减软件的成本? 这个方法初看起来自相矛盾。但是Kent Beck说: The key is that risk is money just as much as time is money。 既然系统在变,那么你不能肯定今天设计的东西一定能够被日后用到。而你需要等待设计完成的成本会很高,因为在你的设计完成之前,没有人可以开始工作。 设计不是独立的。别人要使用你的设计,他必须能够理解你的设计。如果你今天的设计十分复杂,那么你就增加了从今天开始的所有开销,更多的东西需要检查和测试,更多的东西需要理解,更多的东西需要解释。更重要的是,你不能估算出明日的成本。你必须估计日后将要发生什么事情,通常你不可能准确无误地做到这一点。 所以,让设计简单,我们可以通过不断地增量修改设计使得系统更加接近需求,就象我们开车,每次都做一些小小的调整,最后达到目的地。 什么才是简单的设计? 要让设计简单,是否意味着我们可以随意fix and build,写一段,然后任意修改它。但是简单并不意味着随意,当然更不意味着愚蠢。 就象我在Duplicate Code里指出的一样,Once and Only Once通常是代码最简单的形式,因为它没有重复,每一个类都有自己简单的责任,每一个方法都有自己简单的意图。 简单的设计最重要的特性就是容易适应变化.为了达到这样的目的,简单设计应当: 能够简单地被理解.这依赖于你代码的可理解性.只有可理解,下面的简单性才能达到. 能够简单地被修改和扩展.OO系统往往通过增量的方法改变或增加系统行为,所以也就是要被简单地重用,这要求我们没有重复代码. 有最少数目的类.要易于理解系统,那么系统中每一个类应当和需要解决的问题的每一个重要概念相对应,如果人工加入许多毫无意义的类或者太多与问题概念无法对应的类,系统将无法理解 有最少数目的方法.每一个方法应该有他独立的意义, 如果没有可以言述意图的名字,那么系统将难以理解. 如果你看过Kent Beck和其他Agile联盟作者的文章,或者你看过我的Duplicate Code和Long Method,你可能会觉得2和3,4存在着矛盾.因为要达到2的目的,你必须有很多小类和精干的方法,而3,4则要求你具有最少的类和方法.要理解它们之间其实一致的关键在于,你如何决定需要一个新类或者需要一个新的方法.在进行Refactoring时,如果你觉得系统的某一部分具有独立的可对应问题领域的概念时,那么你应当毫不犹豫地使用Extract Class形成一个新类.反之,某一个类无法具有其独立的应用意义,或者该类数据太多而没有行为,这个时候你应当考虑这个类是不是应该被删除.当然,这里面有些例外(如method object)同样道理,如果一个代码片断能够有独立意图的行为,那么不管它的大小,可能是一个简单的表达式,都应该有独立的方法,但如果没有这样清晰的意图,再多的代码都可以在一个方法里面. 显然,简单的设计并非我们想象的那么简单.除了我们可以不太考虑以后解决的问题外,简单,作为一种重要审美标准.不是轻易能够达到的.我们一开始的设计往往不能够达到这样的要求,可能是类的划分不合理,可能存在着重复的代码,可能行为的分配需要调整,要达到简单,你就必须Refactoring你的代码,使设计更加合理. Refactoring如何支持简单的upfront设计? 开始,你可以作简单的设计,也许是一个类,2、3个方法,你针对这个类写出test case,实现代码,让test case通过。在实现这个类的过程中,你发现2、3个方法太长,它们之间会有很多重复代码,于是你进行refactoring,你使用extract method让方法更能揭示意图。然后,你解决另外一个问题,你写出另外一个Test case,可能和上面一个类没有多大的关系,也可能你发现这个类在以前的类上附加了一些功能。这时,你会发现直接对前面一个类进行修改比较困难,你对前面一个类进行refactoring,让它更加容易加入。如果随着新功能的加入,发现前面一个类其实包含了两个应用概念,你可能需要对这个类进行重构,把它拆分为两个类。你进行refactoring,让所有的Test cast都能通过测试。你接着又选取一个需求,增加新的test case,然后实现它。这时候你发现这个类和原来的某个类具有很多类似的地方,你可能需要把这两个类进行进一步的抽象,通过refactoring形成一个新的超类。。。 随着时间的推移,越来越多的需求被实现,系统变得越来越大,某一天,你发觉系统有些变样,你觉得有必要修改系统的某一部分结构。这时候,你和你的同僚可能需要暂时摘下增加功能的帽子。你们可能需要更多的讨论,交流,使用任何有意义的方法为你们的讨论增强交流的效果,白板、CRC,然后进行Refactoring。 Kent Beck指出,某些大的Refactoring可能并不是一天就能完成的。它可能要花费几天甚至一个月的时间。但是,你还需要继续完成用户的需求。这时采取的方法就是小步的增量改变。在实现新需求,写下新的test case时,你可能看到一个机会能够让你的代码朝着大目标前进一步。使用这样的方法,每一次你的工作可能是移动一个变量或一个方法。但是随着新功能进一步的加入,这样的机会不断出现。最终,一个大的目标会变成很小的工作。这时候,你已经水到渠成,花上几分钟就完成了。 Refactoring的这种工作方式可以大大减少UpFront的设计量,它同时使你的设计变为一种必要和需求的产物,这种为了更好地加入新需求所做的设计,更准确地反映了问题的本身。同时,它使得设计随着你对问题的进一步深入而逐渐变得更合理,随着你对新技术的掌握而变得聪明,这是一种进化的设计方法。 设计模式 简单设计的要求 Refactoring对简单设计的支持好像使设计模式变得有些过时。如果我一开始只需要写下一个简单的test cast、实现、refactoring,增加test cast、实现、refactoring。这是否意味着设计模式就毫无意义了呢? 对设计模式和Refactoring,以及与之相关的Agile联盟方法学的研究给我一个很深刻的印象。一个方面,就像Martin Fowler指出,Agile方法学的提倡者往往也是模式社团的领导者。另一方面,如果你仔细体会一下Agile 宣言,你会发觉它们非常重视人的能力。在我自己组织小组试用XP的过程中也发现,XP对它的参与者有很高的要求。 我们已经看到,简单的设计并不是愚蠢的设计,相反,它们是极端聪明的设计。要实现简单的设计,你必须有丰富的知识。这里在于,简单设计提倡你不要太多考虑以后的具体需求本身,但它确实需要你考虑代码和设计的结构。在用Refactoring武装你的思想中,我已经讲到,如果你的设计结构完全不考虑以后的扩展,那么Refactoring也无能为力。 设计模式是面向对象社团对设计的一个重要总结。其实,它们也是对简单设计的最好诠释。因为,好的设计模式,就是对于解决问题所能发现的最简单、最易重用的设计结构。另一方面,使用广为人知的设计模式也使得你的代码更容易为人理解、接受,大大提高了交流的效率、宽度和深度。 从这种意义上将,Refactoring不但没有排除设计模式,它更促进了设计模式的学习、发现和验证,以及更广泛的应用。Agile对程序员素质的要求,在这一点上也得到了充分的体现。一旦小组成员具备熟练运用设计模式的能力,你的设计可能就是一句话:用XXX模式。(在我领导的EOSP2P项目中,这个模式就是半State/半策略模式。当我说出这个模式时,我们发觉整个小组不再需要upfront设计,我们构建,然后Refactoring。当然,象Factory method模式几乎使每个系统都应当使用的。还有后续的proxy模式,都让设计变得如此轻松)。 但是,在应用设计模式的过程中,你必须时时记住简单性这个原则。设计模式最好的应用方法就是从简单开始,只要能够解决问题,抓住这种模式的核心,那么模式良好的结构保证你的Refactoring建立在一个坚实的基础之上。 所以,为了使Refactoring能够更好地进行,你需要更多的学习模式,因为设计模式不但是良好设计的开始,同时也是Refactoring的目标。 Refactoring的目标 Refactoring有时会失去目标,你可能会产生循环的Refactoring,或者你无法判断Refactoring的结果到底有没有让程序的结构更好。 作为OO社团最重要贡献之一的设计模式能够为Refactoring提供一个明确的目标。在Ralph Johnson多篇关于Refactoring的论文中都提到了这个问题。Martin Fowler的《Refactoring》中明确指出的就有state、strategy、visitor等模式。更深入一步,设计模式不但是Refactoring的目标,同时也为看起来有些零散的行为提供了一个全局性的指引。 Christopher Alexander在《The Timeless way of Building》一书中对模式的定义如下: Each pattern is a three-part rule, which expression a relation between a certain context, a problem, and a solution. 很多人在软件领域对他的定义做了修改和扩展,但这三部分内容是不变的。把这个定义放到我们软件上下文来看,设计模式有两个重要特性: 设计模式高于代码层,他不是描述一个好的编码风格,或者某种编程习惯用语; 设计模式不是纯粹理论上的体系结构或者分析方法,它是一种可实际操作的东西。模式界提出的Three Rules就说,你必须提出三个实际的应用例子才能够得上设计模式的条件。 正因如此,很多人都把设计模式称之为micro-architecture。显然,由于它的可操作性,它可以通过Refactoring的方法达到。同时由于它一定层次的理论和总结性,他可以用于引导Refactoring并作为Refactoring的目标。 关于作者 石一楹,现任浙江大学灵峰科技开发公司技术总监。多年从事OO系统分析、设计。现主要研究方向为Refactoring和分析模式。你可以通过shiyiying@hotmail.com和我联系。
 

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

代码泛滥于整个系统:

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

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

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

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

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

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

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



一.Refactoring 介绍 

二.Refactoring 理由 

三.Refactoring 问题 

四.Refactoring 困难 

五.Refactoring 方法 

六.Refactoring 与软件设计 

七.Refactoring 场合与命名规则 



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

龙头复盘神器/复盘于导出工具最新版5.6 龙头复盘神器,复盘于导出工具 阅读详情

相关推荐

python毕设 基于Web的中药材信息查询系统程序+论文

***(程序+源码+数据库+调试部署+开发环境)论文文档1,文末可获取,系统界面在最后面。****

m0_74825541的博客 1257

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

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

编辑空间 2905

ESP32-IDF HTTP服务器实战:从零搭建Web控制界面

本文详细介绍了如何在ESP32平台上使用ESP-IDF框架从零搭建HTTP服务器,并创建Web控制界面。内容涵盖环境配置、服务器基础设置、Web页面处理、GPIO控制接口实现及AJAX异步请求处理,帮助开发者快速掌握物联网设备Web控制开发。

efc123456的博客 1063

重构模式4

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

xxcc的专栏 1448

红外避障模块介绍

该传感器模块对环境光线适应能力强,其具有一对红外线发射与接收管,发射管发射出一定频率的红外线,当检测方向遇到障碍物(反射面)时,红外线反射回来被接收管接收,经过比较器电路处理之后,绿色指示灯会亮起,同时信号输出接回输出数字信号(一个低电平信号),可通过电位器旋钮调节检测距离,有效距离范围2~30cm,工作电压为3.3v-5v。该模块测距离2~~30cm,检测角度35°,检测距离可以通过电位器进行调节,顺时针调电位器,检测距离增加;1.VCC外接3.3v-5v电压(可以直接与5v单片机和3.3v单片机相连).

weixin_46251230的博客 2万+

SCAN和JTAG分别是什么?它们之间有什么联系与区别?

SCAN(扫描)技术是集成电路测试领域的一种方法,主要用于边界扫描测试(Boundary Scan)。它是在集成电路设计中引入的一种测试结构,允许测试人员通过在芯片的输入/输出引脚上设置和读取特殊寄存器(边界扫描寄存器,BSR)的内容,来间接测试电路板上的互联和芯片内部功能块。这种方式可以在不接触其他内部节点的情况下测试整个电路板的连接性,极大地提高了测试覆盖率和可诊断性。JTAG(Joint Test Action Group,联合测试行动小组)则是开发并推广边界扫描测试标准的一个组织。

初心不忘产学研的博客 2544

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

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

透明思考@优快云 2511

10.2 构网型变流器引发的次同步振荡与宽频振荡问题:机理分析与抑制技术

随着构网型变流器在新型电力系统中的规模化部署,其作为电压源主动支撑电网的能力得到验证的同时,也引发了一系列前所未有的稳定性问题。传统的同步发电机主导的电力系统中,振荡模式主要集中于**低频区间**。然而,构网型变流器通过快速数字控制实现的虚拟同步、惯性响应等先进功能,其控制环路动态与电网阻抗、其他电力电子设备之间产生了复杂的交互作用。这种交互不仅可能诱发经典的**次同步振荡**,更可能催生频率范围从数赫兹到数百赫兹甚至上千赫兹的**宽频振荡**。

技术工作者 1315

重构模式5

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

xxcc的专栏 1284

工业4.0必备:C#上位机+数字孪生 生产线实时监控与智能预警系统(工业级实战)

数据割裂:PLC、传感器、工业相机的数据散落在不同系统,想看全局生产状态要切换N个软件,“数据孤岛”导致决策滞后;故障难预判:设备突发故障时,只能停机排查,平均故障响应时间超30分钟,一条生产线停工1小时损失超10万;可视化差:传统监控只有冰冷的数字和2D图表,设备运行状态、生产流程、物料流转无法直观感知,新人上手需3个月才能熟悉产线。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 661

SAP_PP模块跑完 MRP,MD04 里却看不到“计划订单”?排查这 3 个最容易被忽略的主数据参数

MRP 是 SAP 逻辑最严密的模块之一,它绝不会随机罢工。当 MD04 里看不到计划订单时,请不要怀疑系统的计算能力。99% 的情况,都是因为我们给系统下达了矛盾的指令:一边告诉它“我有需求”,一边却通过主数据告诉它“不要计划”、“不要触发”或者“我是冻结的”。掌握这 3 个排查点,你就能在 5 分钟内解决大部分“MRP 失灵”的悬案,成为用户眼中的“系统神医”。

我小时候很黑的博客 602

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

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

ivanlovetracy::伊凡::的专栏 1894

深度学习实战87-高中数学自适应测试系统研究与应用研发,前后台页面设计

大家好,我是微学AI ,今天给大家介绍一下深度学习实战87-高中数学自适应测试系统研究与应用研发,前后台页面设计。高中数学自适应测试系统旨在通过精准评估学生能力,用最少的题目发现其薄弱环节,并提供定制化的学习计划,帮助学生快速提升成绩。同时,系统结合了AI大模型实现自动判卷、生成报告,减轻教师负担,并支持个性化作业布置,使教学更加高效。学生可以清晰了解自身学习状态,教师也能获得精准的学生画像,实现差异化教学。

微学AI的博客 446

【重构获得模式 Refactoring to Patterns】

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

代号1998的专栏 1538

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

refactoring Patterns:第二部分

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

flyelf的专栏 966

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Refactoring Patterns (Second Part)

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

glietpku的专栏 774

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

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:第四部分

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

flyelf的专栏 1046

refactoring Patterns第七部分

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

flyelf的专栏 1005

Refactoring to Patterns

模式是面向对象设计的基石,而测试优先的编程方法和大刀阔斧的重构则是进化式设计的基石。为了避免过分设计或者设计不足,我们有必要学习如何让模式适应新的、渐进式的软件开发节奏。——Joshua Kerievsky软件模式的伟大之处就在于:它们传递了许多有用的设计思想。那么,如果学了一大堆模式,你就能成为一个相当优秀的软件设计师,对吗?当我学了、用了几十个模式之后,我也这样想过。这些模式帮助我开发

superlmj的博客 1173

Refactoring Patterns (Sixth Part)

refactoring Patterns:第六部分内容:简化设计设计模式关于作者相关内容:该系列的其他部分Refactoring和软件设计 石一楹 (shiyiyi

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

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 (First Part)

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

天行健 ● 君子以自强不息 1317
上一篇: refactoring Patterns(四):困难
下一篇: refactoring Patterns(五): 方法
java169
博客等级 码龄19年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值