代码与重构

转自独立blog《Adrop的自留地

出来混,迟早要还的

我们欠下的那些技术

 

这段代码需要怎么重构?

if ((version < 380 &&from == 6) || (version < 370 &&from == 7) ||from == 1013)

        {

            if (tagNo == 1 && shareMsgId >= 0)

            {

                // …;

            }

        }

如何添加一个新的处理分支

bool GetUrlByMD5(const ST& head, ST2& request)

{

       根据md5cache中查询url

       查到 return true

       没查到获失败 return false

}

增加一种处理分支,根据配置支持从cache中通过MD5获取url,同时也支持从cache中获取的方式。如何更好的增加这个功能?

 

 

你认为重构是什么,列举一些你常用的重构方式?

 

为什么不想重构

程序能运行、没有bug、能满足需求就不错了,还额外花那么多时间重构,就那么点工资

天天加班忙着赶需求被产品和领导催,哪有时间重构

逻辑太复杂了,不好重构

逻辑太复杂了,不知道如何下手重构

这么复杂的逻辑,不敢乱动,重构出问题了谁负责

 

 

大型重构和日常重构

 

大型重构

日常重构无处不在

始终以写程序库的思想来写代码,时刻考虑被调用

 

什么时候不能重构

重构与设计

重构与敏捷

重构方法可能是有争议的

重构方法可能是完全相反的

 

 

What?

名词:

A change to made to the internal structure of software to make it easier to understand and cheaper to modify without changing its observable behavior.

在不改变可见行为的前提下,为了让软件更易于理解和更方便修改而对其内部结构所做的改变。

 

动词:

To restructure software by applying a series of refactorings without changing its observable behavior.

在不改变软件可见行为的情况下,运用一系列重构方法,重组其结构。

 

Why?

为了让代码更优美,更赏心悦目

满足形式的完美主义和代码偏执倾向

 

重构能改善软件设计

重构使软件更容易理解

重构有助于找到bug

重构有助于提高编程速度

 

 

When?

任何有重复的时候重构
不爽的时候就重构

bad smell

       重复代码

       过长函数

       过大的类

       过长参数列表

       发散式变化-一个类受多种变化影响

       散弹式修改-一种变化引发多个类的修改

       依恋情节-过于依赖另一个类的多个方法

       数据泥团-多个类中一组字段频繁出现,一组方法参数在多个方法参数列表中频繁出现

       基本类型偏执-一组基本数据类型多处出现,可以提取为一个类

       swtich语句

       平行继承体系-散弹式修改的特例,增加一个子类,同时也需要增加另一个类的子类

       冗余类

       过度设计

       类的临时字段-只在某种特定情况下才有效的类的字段

       过度的链式函数调用

       中间人-类的函数过多的委托给其他类

       亲密关系-一个类对另一个类的private成员过于好奇,尤其是继承关系下子类对父类的过度依赖

       类似功能的类

       不够用的类库

       数据类-只有数据成员的类,如果有

       不完整的继承-只需要父类的少数方法

       注释-最好的注释是不要注释,自注释

      

 

添加功能时重构

修正bug时重构

评审代码时重构

 

重构分类和方式

 

重新组织函数

       提炼函数

       内联函数-消除不必要的函数

       内联临时变量-消除不必要的临时变量

       以查询取代临时变量

       引入解释性变量

clip_image002[8]

       分解临时变量

clip_image004[8]

       移除对参数的赋值-出参的值被修改掉,避免有出参

       以函数对象取代函数-一个大函数,提取为一个类,并分解为多个小函数

       替换算法-修改函数本体为另一个算法实现

在对象之间搬移特性

       搬移函数

       搬移字段

       提炼类

       将类内联化-消除不必要的类,合并入另一个类中

       隐藏委托关系-通过委托类调用另一个对象,在服务类上实现客户所需要的所有函数,以隐藏委托

       移除中间人-客户方直接调用受托类

       引入外加函数-类库不提供的方法,自己实现,不对调用方有任何依赖

       引入本地扩展-类库不提供的方法,封装在类中,继承或组合的方式

重新组织数据

自封装字段-引入gettersetter,字段设置为private,并且有简单逻辑

以对象取代数据值-简单数据值随着软件发展,需要和其他数据项和行为一起使用才有意义,taf接口中,始终用结构来作为入参和出参,而不用基本数据类型

将值对象改为引用对象-引用对象,是可变的,值对象是不可变的,内部值都是不可变化不可被设置的

将引用对象改为值对象

以对象替代为数组-有意义的数组,比如索引为0的元素表示xxx1标识xxx,用类来封装

复制被监视数据-MVCGUI中,Model和数据逻辑处理的分离

将单向关联改为双向关联

将双向关联改为单向关联

以字面常量取代魔法数-有意义名称的常量、宏替代

封装字段-加入简单逻辑

封装集合-类中有arraylist等集合,不提供对集合字段的直接访问,支持对集合元素的add/remove等方法,并且返回不可修改的集合副本

以数据类取代记录-记录可以认为是c中的struct,用类来代替

以类取代类型码-可枚举的常量,用类来代替,类是不能创建的,预先创建好设置为static,直接使用,好处是避免传入非法的值

以子类取代类型码-不同的类型有不同的行为,才考虑,否则考虑用类取代类型码来重构。

State/Stategy取代类型码-你有一个type code ,它会影响class 的行为,但你无法使用subclassing。将类型封装成一个类,做为构造函数的参数传入。

以字段取代子类-你的各个子类的惟一差别只在「返回常量数据」的函数身上。消除子类,增加类型码的字段,从构造函数传入,并且用工厂替代构造函数

简化条件表达式

 

分解条件语句

     if条件提取为一个方法

     then部分提取为一个方法

     else部分提取为一个方法

合并条件语句-检查条件相同,处理行为是一致的,考虑将条件合并或提取为单独的方法

合并的重复的条件片段-一组条件表达式的处理中都包含了相同的代码,提取这些相同代

码,根据情况搬离到条件表达式之前或之后

去除控制标志-条件表达式处理中有根据条件对某个控制标志赋值的情况

     break代替回控制标志

     return代替控制标志

用守卫语句代替嵌套条件语句-针对某个条件单独检查并立刻从函数中返回

clip_image006[8]

用多态代替条件语句-一个表达式中根据一个类型码的不同而有不同的行为

引入空对象-需要多次判断某个对象是否为空

clip_image008[8]

引入断言

简化函数调用

       函数改名

       添加参数

       将查询函数和修改函数分离

       令函数携带参数-若干函数做了类似的工作,但在函数本体中却包含了不同的值。

clip_image010[8]

       以明确函数取代参数-有一个函数,其内完全取决于参数值而采取不同反应

clip_image012[8]

       保持对象完整-你从某个对象中取出若干值,将它们作为某一次函数调用时的参数。

clip_image014[8]

       以函数取代参数-对象调用某个函数,并将所得结果作为参数,传递给另一个函数。而接受该参数的函数也可以(也有能力)调用前一个函数。

clip_image016[8]

       引入参数对象-以对象取代同时出现的多个参数

       移除设置函数-不需要被改变的值,无需设置函数,不该暴露的也不要暴露

隐藏函数-不该暴露的也不要暴露

以工厂函数取代构造函数

封装向下转型

以异常取代错误码

以测试取代异常

处理概括关系

       字段上移

       字段下移

       构造函数本体上移

       函数上移

       函数下移

       提炼子类

       提炼超类

       提炼接口

消除不必要的继承体系

       构造模板函数-Template Pattern

       以委托取代继承-某个subclass 只使用superclass 接口中的一部分,或是根本不需要继承而来的数据。

       以继承取代委托-在两个classes 之间使用委托关系(delegation),并经常为整个接口编写许多极简单的请托函数(delegating methods)。

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/adrop/archive/2013/03/15/2962126.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
# 智慧旅游解决方案摘要 智慧旅游解决方案旨在通过新一代信息网络技术和装备,实现旅游服务、管理、营销和体验的智能化。该方案响应国家政策背景,如国家旅游局和工业信息化部的指导意见,以及国家发改委的发展规划,强调数字化、网络化、智能化在旅游业的应用,推动5G和移动互联网技术在旅游领域的创新应用。 方案的建设目标围绕“一个中心、四个方面、五大平台”展开,即以智慧旅游数据中心为核心,面向服务、管理、商务和营销构建智慧景区管理平台、智慧旅游服务平台、智慧旅游商务平台和智慧旅游营销平台。这五大平台将整合全域旅游资源,提升旅游设施,拓展旅游空间,融合旅游产业链,提升旅游服务,定制旅游产品,推进旅游改革。 建设内容涵盖了整体架构的构建,包括智慧服务、智慧管理、电子商务和智慧营销等方面。通过云计算、人工智能、大数据、物联网、5G等技术,实现“云-管-端”服务能力,打造集时间、空间、层次为一体的体验平台。此外,还包括智慧景区管理平台的多个子系统,如视频监控、应急指挥调度、流量监测、舆情监督、线路SOS一键呼救、GIS人车调度、停车场管理、语音广播、环境监测管理、多媒体发布、电子巡更以及指挥调度大屏建设等。 智慧旅游服务平台则包括自助票务系统、人脸识别、扫码购票、景区门户网站、机游、WIFI覆盖系统、数字全景VR、AI机器人、智慧座椅、智慧厕所等,旨在提升游客体验,实现景区的智能化管理和服务。通过这些服务,游客可以享受到便捷的购票、入园、导览和信息服务,同时景区管理者能够更有效地监控和管理景区运营。 智慧旅游商务平台则侧重于旅行社团队申报、电子商城、综合票务系统、分销管理系统、大会员系统和景区聚合支付系统,为旅游企业提供全面的商务服务和营销支持。这些平台和系统帮助旅游企业拓宽分销渠道,实现财务管理和订单管理,同时为游客提供便捷的支付和会员服务。 最后,智慧营销平台通过综合票务系统、分销管理系统、大会员系统和景区聚合支付系统,为旅游行业提供精准的营销工具和策略。这些工具和策略有助于整合旅游资源,拓宽销售渠道,提升游客体验,实现旅游业务的数字化和智能化。 智慧旅游解决方案通过这些综合性的技术和平台,不仅提升了游客的旅游体验,还为旅游行业的可持续发展提供了强有力的技术支持和数据驱动的决策依据。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值