refactoring Patterns(三):问题

DeepSeek Harness接入QQ实战:把DSH变成赛博群友 大模型应用正从单机问答走向多平台集成,如何将模型能力嵌入即时通讯工具成为工程实践的热点。消息接入、会话管理、插件扩展是构建智能群聊机器人的核心三要素。DeepSeek Harness(DSH)作为一款模型会话工作流管理工具,凭借多会话管理、模型调用编排以及灵活的插件机制,能够在QQ群聊场景中实现“接收消息→模型生成→回复推送”的完整闭环。本文从基础概念切入,详解DSH接入QQ的两种实现路线——外部API转发与原生插件适配,覆盖环境准备、启动调试、接口调用与性能观察,并给出常见问题排查清单。无论是本地AI助理 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> 任何一种技术都可能有它自己的麻烦。但是往往在我们使用一种新技术的时候,可能还不能深入到发现它带来的问题,正如Martin Fowler所说: 在学习一种能够极大提高生产力的新技术时,你很难看到它不能应用的场合。 他把Refactoring的情景和面向对象出现使得情景相比较: 情况恰如10年前的对象。不是我不考虑对象有限制。只是因为我不知道那些限制是什么,虽然我知道他带来的好处。 但是Martin Fowler和其他人确实观察到了Refactoring可能引发的某些问题,我们可以来看一下: 数据库 很多应用程序的代码可能与数据库结构绑定得非常严密。如果要修改这些代码,需要改变还有数据库结构和原先已经存在的数据。 O/R mapping可以用来解决这个问题。使用专业的O/R mapping工具能够实现关系数据库的迁移。但是,就算这样,迁移也需要付出额外的代价。 如果你使用的并非关系数据库,而是直接采用OO数据库,这一点的影响可能会变得更小。 所以,我建议每一个使用数据库的应用程序都应该采用O/R mapping或者OO数据库。目前出现的各种企业级应用解决方案如J2EE本身就提供这样的构架。 如果你的代码没有这样一个隔离层,那么你必须手工或编写专用的代码来实现这些迁移功能。 接口改变和Published Interface 有很多Refactoring操作(如rename method name)确实改变了接口。面向对象承诺在接口不变的情况下给你以实现变化的自由。但如果接口发生改变,那么你就不得不非常小心了。 为了保证系统的可观察行为不变,你必须保证这些接口的改变不会影响到你无法取得 的代码。如果你拥有了所有使用该接口的类的源代码,你只要把这些地方同时也改变即可。 但是,如果你没有办法得到所有这些使用的代码,那么你就不得不采取额外的途径。事实上,如果你的代码是一个代码库(如Sun JDK的集合框架)或者是一个Framework,那么这一点几乎是不可避免的。 要使得这些依赖于你老接口的代码能够继续工作,你必须保留老接口。现在你有两套接口,一套是老的,一套是经过Refactoring的新接口。你必须把对老接口的调用分派到新接口。千万不要拷贝整个函数体,因为这会产生大量的重复代码。 这种方法虽然能够解决问题,但是却非常麻烦。由于Refactoring通常会涉及到状态、行为在不同类之间的转移,如果一个方法从一个类移动到另一个类,那么使用这种分派的方法可能需要一些不必要的中间状态或者参数。这会使你的代码显得难以理解和维护,在一定程度上削减了Refactoring所应起到的作用。 因此,这种方法只应该用于过渡时期。给用户一定的时间,允许用户代码能够逐渐转移到新接口,在超过一定的期限后,删除老方法,不再支持老接口。这也是Java Deprecated API的意义所在。 像这样保护接口虽然可能,却非常困难。你至少需要在一段时间内维护两套接口,以保证原来使用你老接口的客户代码还能继续使用你的新代码,Martin Fowler把这些接口称之为Published Interface。虽然你不可能避免公布你的一部分接口,不然谁也不能使用你的代码,但是过早公布不必要的接口会造成不必要的麻烦,就像Martin Fowler给我们的提示: Don't publish interface prematurely. 用Refactoring思想武装自己的设计 如果你不理解OO的思想,那么你就不可能真正地用好OO语言。同样,如果你没有把Refactoring的思想贯穿于你的开发过程,你也不可能用好Refactoring。 Refactoring包含两个方面的想法:它告诉你可以从简单的设计做起,因为即使代码已经实现,你还是可以用它来改进你的设计。然而,另一方面,它绝不是告诉你可以信手涂鸦。我给你的忠告是: Started simple but not stupid。 如果你一开始就设计了愚蠢的接口,甚至是错误的接口。在程序演变的过程中,这一部分可能变成系统的核心。对之进行Refactoring可能需要花费大量的精力,而改变接口和类的操作可能会是这些Refactoring主要内容。对核心类接口的变化可能会迅速波及到系统的各个层面,如果你的总体结构是好的,那么这种涟漪可能会在某一个层次消失。(譬如环状和层次性的体系结构。)如果你没有这样的抽象机制和保护体系,那么对核心类的修改将会直接导致整个系统的变更,这是不能接受的。 所以,在设计一个类的时候,你需要问自己几个问题,如果事情发生了这种变化,我会如何修改来适应?如果发生了那种变化,我会怎样来适应?如果你能够想到可能的Refactoring方法,那么证明你的设计是可行的。这并不意味着你要去实现这样的设计,而是保证自己的设计不会把自己逼入到死角。如果你发现自己的代码几乎没有办法Refactoring来适应新的需求,那么你要仔细考虑考虑别的思路。 每次公司的程序员问我一个设计是否合理,我总是反问几个问题:你如何适应这种变化,适应那种可能的变化。我同时指出现在没有必要去实现这些变化。我很少直接回答他好坏或者给他一个答案,但在思考了我反问他们的问题以后,程序员总能对自己的设计做出好的评判,从而找到很好的解决方案。所以,使用Refactoring的思想考虑你的设计。 编程语言 虽然Refactoring是一种独立于编程语言的方法,但你所使用的编程语言往往会或多或少地影响到Refactoring的效率,从而影响你采用Refactoring的积极性. Refactoring最初的研究是从Smalltalk开始的.随着Refactoring在Smalltalk上的极端成功,更多的面向对象社团开始把Refactoring扩展到其他语言环境.但是不同语言的不同特点有时会对应用Refactoring提供便利,有时却会制造障碍. 支持Refactoring的语言特点和编程风格 静态类型检查和存取保护 静态类型检查可以缩小对你想要refactoring的程序部分的可能引用范围.举个例子,如果你想要改变一个类的成员函数名,那么你必须改变函数的声明和所有对该函数的引用.如果程序很大,那么查找这样和改变这样的引用就比较困难. 和Smalltalk这样的动态类型语言不同,对静态类型进行检查的语言(C ,Java,Delphi等等)通常具有类继承和相关的存取保护(private,protected,public),这些特点使得寻找对某一个函数的引用变得相对简单.如果重命名的函数原先声明为private,那么对该函数的引用只能是在他所在的类或者该类的友类(C )等等.如果声明为protected,那么只有本类,子类和友员类(同包类)才能引用到该成员函数.如果声明为public,那么还只需要在本类、子类、友类和明确引入该类的其他类即可(include,import)。 我想提起大家注意的另外一个问题。在软件的最初开发和整个开发流程中尽可能早地应用好的设计原则是一个软件项目成功的重要因素。不管是从封装的角度还是从Refactoring的角度来看,定义成员变量和成员函数应当从最高的保护级别开始。除了非常明显的例子之外,你最好首先把成员变量和函数定义为private。随着软件开发的进一步深入,当其他类对该类提出"额外"的请求,你慢慢地放宽保护。原则是:如果能够放在private,就不要放在protected,能够放在protected,就不要放在public。 使Refactoring复杂化的语言特点和编程风格 预处理指令 某些语言环境通常提供预处理指令,如C 。因为预处理不是C 语言的一部分,这通常使得Refactoring工具实现变得困难。有研究指出,程序往往需要在预处理之后才能进行更好的结构分析,而在这一点上预处理指令信息已经不存在。而refactoring一旦没有和源代码的直接联系,程序员将不太可能对理解Refactoring的结果。 依赖对象尺寸和实现格式的代码 C 继承自C,这使得C 很快流行起来,程序员的学习难度也大大减小。但这是一把双面刃。C 因此而支持很多编程风格,而其中的某些违反了优雅设计的基本原则。 使用C 的指针、cast操作和sizeof(Object)这些依赖对象尺寸和实现格式的代码很难refactor。指针和cast介入别名的概念,这使得你要查找所有对此Object有引用的代码变得非常困难。这些特征的一个共同特点就是它们暴露了对象的内部表达格式,从而违反了抽象的基本原则。 举个例子,C 使用V-table机制来表达可执行程序中的成员变量。继承得来的成员变量在前,本类定义的在后。一个我们经常使用,并且认为安全的refactoring是push up fields,也就是把子类中的一个成员变量移到父类。因为现在变量从父类继承而非本类定义,经过refactoring后的可执行程序之中变量的实际位置已经发生了变化。 如果程序中所有的变量引用都是通过类接口来存取的,那么这样的变化不会有问题。但是,如果变量是通过指针运算(譬如,一个程序员有一个指向对象的指针,知道变量在类的第9个字节,然后使用指针运算给第9个字节赋值),上面的refacoting过程就会改变程序的行为。类似情况,如果程序员使用if (sizeof(object)==15)这样的条件判断,refactoring的结果很可能会对该对象的大小产生影响,从而变得不再安全。 语言复杂度 语言越复杂,对语言语义的形式化就更加困难。相对Smalltalk和稍微复杂的Java而言,C 可称得上是一种非常复杂的语言,这使得对C 程序refactoring工具的研究大大滞后于smalltalk和Java。 解析引用的方式 由于C 绝大部分是在编译是解析引用,所以在refactoring一个程序之后通常至少需要编译程序的一部分,把可执行程序连接起来才能看到测试refactoring的影响。相反,smalltalk和CLOS提供解释执行和增量编译的技术。Java虽然没有解释执行,但它明确把一个公共类放在一个单元内的要求,使得执行一系列refactoring的成本减小。由于refactoring的基本方法就是每一步小小变化,每一步测试,对于C 而言,每一个迭代的成本相对较高,从而程序员变得不太愿意做这些小变化。 反射、Meta级程序分析和变更 这一点可能更让研究者关心而不是实践者的问题。C 并没有提供对meta级程序分析和变更的很好支持,你无法找到象CLOS这样的metaobject协议。这些协议有时对refactoring非常有用,譬如我们可以把一个类的选定实例改变为另一个类的实例,这时候可以利用这些反射协议实现把所有对旧对象的引用自动变更为指向新的实例。 Java虽然还没有像CLOS这样强大的meta级功能,但是JDK的发展已经显示了Java在这方面非常强劲的实力。象上面的例子,我们也可以在Java上做到。 一个小结 基于上面的比较,我们认为Java是应用Refactoring的最佳语言。最近的观察也证实了这一点[Lance Tokuda]。 从实践者的角度来看,目前最流行的refactoring文献基本上都采用Java语言作为范例,其中包括Martin的《Refactoring》。目前市场上有数种支持Java和Smalltalk的Refactoring工具,而C 的工具却几乎没有。这里面,语言本身的复杂性有很大的影响。 当然,这并不意味着C 程序员就不应该使用refactoring技术,只不过需要更多的努力。Refactoring技术已经证明自己是OO系统演化的最佳方法之一,不要放弃。 关于作者 石一楹,现任浙江大学灵峰科技开发公司技术总监。多年从事OO系统分析、设计。现主要研究方向为Refactoring和分析模式。你可以通过shiyiying@hotmail.com和我联系。
 

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

代码泛滥于整个系统:

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

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

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

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

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

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

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



一.Refactoring 介绍 

二.Refactoring 理由 

三.Refactoring 问题 

四.Refactoring 困难 

五.Refactoring 方法 

六.Refactoring 与软件设计 

七.Refactoring 场合与命名规则 



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

若依框架二次开发——RuoYi-AI 本地部署流程 阅读详情

相关推荐

UReport2 报表设计器 在线表格

UReport2官网 一、UReport2报表设计器 UReport2是一个开源的可视化报表设计器,功能强大,操作简单,可以实现复杂的报表统计,有各种各样的导出和打印功能,支持导入Excel表格! 1、报表设计器 2、设计一个简单的用户列表展示 二、可编辑表格 扩展了layui的表格,支持多元化数据编辑(单选,多些、日期、下拉联动),开发简单、高效、便捷。有了它就可以轻松开发类似进销存系统的表格录入功能了,用户拿来即用! 三、主从表录......

ejinxian的专栏 2万+

RefactorIt 使用说明

 RefactorIt 2.6 FreewareRefactorIT is a tool for Java developers. A developer can take source code of any size and complexity and rework it into well-designed code by means of automated refactorin

黄瓜和土豆的专栏 1934

Windows 下安装 Hermes Agent 完整教程(含踩坑记录)

不支持原生 Windows,必须通过 WSL2 (Windows Subsystem for Linux 2) 运行。WSL2 是 Windows 内置的 Linux 兼容层,可以在 Windows 上运行完整的 Linux 环境。

weixin_50191542的博客 4283

Refactor this function to reduce its Cognitive Complexity from 40 to the 30 allowed

提交代码,报错:Refactor this function to reduce its Cognitive Complexity from 40 to the 30 allowed 降低认知复杂度sonar :Cognitive Complexity of functions should not be too high 1. 尽量减少打断线性代码执行的语句(如if else 、for、catch), 多层嵌套语句 2. 用三目运算符替代 if else. 如果没有else分支,不用再特意替换成三目

Q505410276的博客 7155

产品必备技能(十):如何绘制原型图?先要绘制页面流程图+页面原型图!附实操原型图、流程图实例(抖音)

文章目录目标题目实操步骤模板实操【抖音】APP的视频发布功能页面流程绘制页面流程图合格标准绘制页面原型图合格标准 目标 新入行的产品经理都对原型抱有向往的心境,但是有经验的产品经理不会一上来就画原型,而是先画页面流程再来画原型。通过学习,你将学会如何用页面流程图规划用户行为路径、如何借助原型识别问题、减少风险、有效沟通。 题目 任意选择一款你喜欢的产品,体验某个功能,下载并梳理此功能至少5个以上的页面流程跳转点(后面会解释),还原2 - 3个主要界面的低保真原型图。 实操步骤 可使用手绘以及Process

汪雯琦的博客 4846

卡尔曼滤波与目标追踪

卡尔曼滤波与目标追踪为什么要学卡尔曼滤波?卡尔曼滤波是什么?一些概率论的知识基础卡尔曼滤波完整推导状态估计计算卡尔曼增益预测和更新 卡尔曼滤波部分我打算分三节(三次博客的内容): 卡尔曼滤波与行人状态估计 扩展卡尔曼滤波(EKF)与传感器融合 过程模型,无损卡尔曼滤波(UKF)与车辆状态轨迹 为什么要学卡尔曼滤波? 卡尔曼滤波以及其扩展算法能够应用于目标状态估计,如果这个目标是行人,那么就是行人状态估计(或者说行人追踪),如果这个目标是自身,那么就是车辆自身的追踪(结合一些地图的先验,GPS等数据的话就

qq_43232556的博客 4176

Sonar部分问题解决归纳

1.Refactor this method to not always return the same value. 方法的返回值应根据不同情况而发生改变,不能返回固定值。实际判断是应结合返回值赋值情况等决定是否更改。 2.String literals should not be duplicated 重复的字符串文字使重构过程容易出错,因为必须确保更新所有出现的内容。另一方面,常数可以从许多地方引用,但只需要在一个地方更新。在类的最前方定义合适的常量来代替大量的字符串重新出现。 3.Meth.

weixin_45800976的博客 7128

从 Claude Code 到 SAP ADT,vibing-steampunk 把 ABAP 开发带进 Agentic 工程现场

vibing-steampunk(vsp)是一个连接SAP ADT API与AI编码代理的桥梁工具,通过MCP协议实现ABAP开发的自动化。它绕开传统GUI脚本方式,直接利用ADT REST API进行代码读写、调试和部署。该工具提供包分析、边界检查、LUW分析等功能,并创新性地采用Hyperfocused模式和方法级编辑来优化token使用效率。通过上下文压缩技术,vsp能智能提取关键代码片段,显著提升AI处理ABAP代码的精准度,为SAP系统现代化改造提供了高效的技术路径。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 191

sonar问题描述

最近公司项目结合了jenkins以及sonar,排查出了之前已经离职同事,许多代码问题 现在我就简单介绍下我解决的出现比较多的sonar问题 1、Define a constant instead of duplicating this literal “djxhs” 3 times. 定义常量去替代重复的字面值==>简单来说,就是一个"djxhs"重复太多了,要求你定义一个常量来代替它 之前 //Noncompliant Code Example public void run() { prep

yking 1万+

【数据集】中国大气污染物数据集CHAP(1km空间分辨率)-韦晶团队

中国大气污染物数据集CHAP(1km空间分辨率)-韦晶团队

WW、forever的博客 2600

在 ABAP 环境中创建 Job Catalog Entry 和 Job Template 的完整实践指南

摘要:本文介绍了SAP BTP ABAP环境中Application Job的云原生解决方案,对比传统后台作业模式。重点阐述了Job Catalog Entry和Job Template两大核心概念,通过库存重估业务场景演示如何实现可调度类、创建Job Catalog Entry及Job Template。文章详细说明了从ABAP类到Job Catalog Entry再到Job Template的完整链路,并分享实际项目中的设计经验和注意事项,帮助开发者将传统后台作业迁移到Application Job框架

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 234

Sonar 代码检测常见问题及修改实例(前端JS版本二)

如果是首次阅读,推荐结合上一篇文章一起看。《Sonar 代码检测常见问题及修改实例(前端JS版本)》, 1. Refactor this loop to do more than one iteration. 问题代码: 解决 去掉第一层关于变量 j 的外循环,因为它确实毫无意义。程序执行完内循环,代码就 return 退出了,不会再执行外层循环。因此,去掉关于变量 j 的外循环即可。 2. Duplicate key '*'. 问题实例:Duplicate key 'zIn...

liuzhen007的专栏 6747

WIN10系统下VS2019编译CloudCompare2.12.4

CloudCompare2.12.4

点云侠的博客 3145

【重构获得模式 Refactoring to Patterns】

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

代号1998的专栏 1538

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

refactoring Patterns:第二部分

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

flyelf的专栏 966

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

refactoring Patterns:第三部分

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

flyelf的专栏 1040

《Refactoring to patterns》

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

飞光流影 1025

refactoring Patterns:第一部分

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

flyelf的专栏 1085

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

flyelf的专栏 1106

refactoring Patterns

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

忆风 297
上一篇: 步入J2EE架构和过程(1)
下一篇: refactoring Patterns(二):为什么要 Refactoring
java169
博客等级 码龄19年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值