学习之路四十一丶简论重构

四月份的最后一天,写点心得,记录一下。

这个月一直忙着开发一个基于Win32 API的程序,大量运用了句柄等很多API的知识。

尤其随着代码量越来越大,逻辑越来越复杂,代码的清晰,健壮,扩展性成了一个需要重视的问题,也就是要适时的重构了。

一丶重构的时机

  上个星期在修改一块重大逻辑的时候,需要修改很多代码,当时我犯了一个错误,一开始想了一个思路,但一上来没写多少就开始想着重构代码,目的是使其代码清晰以及可扩展。

  可是随着时间的流失,不仅没有重构好,而且该改的逻辑也没有改好,我很郁闷,为什么会这样呢?于是开始了沉思 - 重构的时机应该是什么时候?

  重构的时机要把握的恰到好处,太早缺乏代码之间的连贯性,因为你代码都没有写好,就想着开始重构了,那可不好;太晚代码写好了,逻辑也通了,但是改起来特别费力,是牵一发而动全身,说不定还改出了更多问题呢,需要花更多的时间去修改代码以及
fix bug。

  所以重构的时机因人而异,因你的能力,因你的业务流程熟悉度,不过我选择的时机是中间靠前一点

  因为这个时候你已经写了将近一半的代码,业务逻辑也已经实现了一半了,那么是否出现代码冗余,阅读性差,抽象程度差的问题,如果有的话就要想想该怎么重构了,如果没有继续往下写,保持好状态。

  当快要接近完成的时候,再来看看以前的代码,因为从现在的眼光看以前写的,总会有新的想法,如果有,赶紧实施,写出高质量代码。

  所以重构的时机要自己掌握好,其实有几点可以表明你需要重构:

  1.冗余,重复代码太多;

  2.逻辑层次不清晰,变量命名自己都搞不清楚了;

  3.类,方法各个层次之间很混乱;

  4.无法进行有效的扩展;

  5.健壮性太差

  所以在遇到上面一些问题之后,就要思考需要用哪些重构技巧来改善代码质量了,这个需要积累,加油。

二丶重构的一些技巧

  这里就写一些我重构用的方法:

  1.去重,提取共用方法

    记得写过一个去除重复的try-catch的代码,用到了委托以及反射来减少重复代码

  2.抽象

    接口,继承,虚方法,抽象类。

    其实最重要的是你要深刻理解你的业务,并且抽取他们共同的部分,以及通过虚方法来实现一个方法的不同操作

  3.抽象工厂

    抽象工厂又可以分为:单例工厂和多实例工厂

  4.配置文件

    自定义配置文件,可以更有效的控制不同方式做不同的事

  5.灵活运用Attribute

  6.取更有意义的变量,属性,方法,类的名称,长一点没有什么大碍

  7.反射

  好了,就这些,还有很多没学习了,继续加油......

以同步至:个人文章目录索引

学习之路四十一丶简论重构,码迷,mamicode.com

时间: 2025-01-04 22:54:25

学习之路四十一丶简论重构的相关文章

Redis——学习之路四(初识主从配置)

首先我们配置一台master服务器,两台slave服务器.master服务器配置就是默认配置 端口为6379,添加就一个密码CeshiPassword,然后启动master服务器. 两台slave服务器配置如下: 1.先找到配置redis.windows-service.config文件修改port 6379 为port 6380 2.然后配置master服务器地址:slaveof 127.0.0.1 6379,然后主服务有密码还需要配置密码 masterauth CeshiPassword(本

[原创]java WEB学习笔记79:Hibernate学习之路--- 四种对象的状态,session核心方法:save()方法,persist()方法,get() 和 load() 方法,update()方法,saveOrUpdate() 方法,merge() 方法,delete() 方法,evict(),hibernate 调用存储过程,hibernate 与 触发器协同工作

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

Dynamic CRM 2013学习笔记(四十一)流程4 - 异步工作流(Workflow)用法图解

在CRM 2013 里,工作流被分成二类:异步工作流和实时工作流.异步工作流依赖一个windows 服务: Microsoft Dynamics CRM Asynchronous Processing Service , 这个服务必须在CRM 服务器上运行,否则异步工作流不会运行.异步工作流有可能不会立即执行,如果想要立即执行的工作流,可以考虑用实时工作流.CRM 里把它当作实体,所以可以在高级查找里查找它,还可以基于它生成报表.下面详细介绍如何使用异步工作流. 为了使用工作流,要注意权限是否打

java痛苦学习之路[四]---关于struts2-convention-plugin使用

一.struts2-convention-plugin配置文件具体解释 <constant name="struts.convention.actionConfigBuilder" value="convention"/> <constant name="struts.convention.actionNameBuilder" value="convention"/> <constant name

Python学习笔记(四十一)— 内置模块(10)urllib

摘抄自:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001432688314740a0aed473a39f47b09c8c7274c9ab6aee000 Get urllib的request模块可以非常方便地抓取URL内容,也就是发送一个GET请求到指定的页面,然后返回HTTP的响应: 例如,对豆瓣的一个URLhttps://api.douban.com/v2/book/2

Hadoop学习之路(十一)HDFS的读写详解

HDFS的写操作 <HDFS权威指南>图解HDFS写过程 详细文字说明(术语) 1.使用 HDFS 提供的客户端 Client,向远程的 namenode 发起 RPC 请求 2.namenode 会检查要创建的文件是否已经存在,创建者是否有权限进行操作,成功则会 为文件创建一个记录,否则会让客户端抛出异常: 3.当客户端开始写入文件的时候,客户端会将文件切分成多个 packets,并在内部以数据队列“data queue(数据队列)”的形式管理这些 packets,并向 namenode 申

Spark学习之路 (十一)SparkCore的调优之Spark内存模型

摘抄自:https://www.ibm.com/developerworks/cn/analytics/library/ba-cn-apache-spark-memory-management/index.html 一.概述 Spark 作为一个基于内存的分布式计算引擎,其内存管理模块在整个系统中扮演着非常重要的角色.理解 Spark 内存管理的基本原理,有助于更好地开发 Spark 应用程序和进行性能调优.本文旨在梳理出 Spark 内存管理的脉络,抛砖引玉,引出读者对这个话题的深入探讨.本文

Kubernetes学习之路(十一)之资源清单定义

一.Kubernetes常用资源 以下列举的内容都是 kubernetes 中的 Object,这些对象都可以在 yaml 文件中作为一种 API 类型来配置. 类别 名称 工作负载型资源对象 Pod  Replicaset  ReplicationController  Deployments StatefulSets Daemonset Job CronJob 服务发现及负载均衡  Service  Ingress 配置与存储 Volume.Persistent Volume.CSl . c

Android开发学习之路-Git的极简教程?

Git是一个代码版本管理工具,也就是允许我们的一个项目拥有多个版本,这样我们可以随心所欲的修改我们的代码,如果出现问题,可以回退到某一个提交点.如果你还在用一堆堆注释来更新你的代码,那么可以尝试一下Git了,毕竟,它不难. 常用的Git操作其实不多,明白这个过程就行了. ※ 关于Git的安装毕竟简单,所以这里就不说了.没钱买mac,所以...... 简单的流程:初始化->修改文件->添加至暂存区->提交修改->回退 安装完毕后,需要先设置用户名和邮箱,在桌面中右键选择Git Bas