重构

我理解的代码重构与完美思想

给你一囗甜甜゛ 提交于 2019-11-28 04:48:49
说说代码重构 公司项目初期,在很长一段时间内,并没有认真做好工作量的时间安排表。往往是早晨开个会,简单描述下任务,下午就最好能把模型给出来,甚至要求高的是当天做完,第二天可以展示给用户练手。 当年在阿里服装ERP组的时候,老板就是这么要求的。老板的出发点就是那样,追求极致的用户体验(此处应当是交付体验)。当技术资源不够时,我们底下做事情的人,往往就是偷工减料(当然不是制造 Bug,而是设计模型时偷懒,命名等不规范),要不就要加班,甚至爱有时候即便偷工减料了,还当天完不成。 可是说这样的编程产出的作品,和流水线工人无异,堆砌的代码,因为设计不清晰,缺少规划,等到用户不满意返工时,又要重做,而之前的产出,却不能被复用,劳心劳力。 所以,留给我们编码的最佳方案就剩 2 个: 1)重设计 2)要重构 重设计,一开始就能考虑各类应用场景,以及异常错误,做好完整的测试,接下来的任务再改变,基于之前设计基础,做修改会顺畅很多。 要重构,在设计这关缺失的情况下,我们对自己的代码负责,唯一途径就是通过重构,而且是及时的重构。当项目完成时,如果没有重构完毕,那么之后再重构也有心无力了。首先开发、测试资源人手都没了;第二,重构完毕也不知道是否有漏掉的业务实现;最后,重构未必有人肯买单,当系统好用的时候,开发或者用户都排斥无意义的改造,我们说服不了他们。 野蛮生长

Feign 客户端的重构,新建springcloud架构

眉间皱痕 提交于 2019-11-28 03:18:49
1,在上篇博文中,已经实现了feign 客户端来远程调用接口的功能,因为feign 客户端在springcloud 开发过程中是比较常用的方式 https://www.cnblogs.com/pickKnow/p/11385656.html 2,上一篇博文中的架构,比较简单,直接使用feign 客户端没有重构的话,代码比较冗余。例如,member 服务中调用FeignMember 中的 getOrder 接口,FeignOrder 中的接口的具体实现在order 服务中的getOrder 中来实现 这样的代码比较冗余,如果有很多方法,就得写好多的接口。。。 @FeignClient(name = "app-aiyuesheng-order") public interface OrderFeign { @RequestMapping("/getOrder") public String getOrder(); 。。。。 。。。。 如果有好多接口,这边得写很多,代码很冗余 } 3,springcloud 项目中,重构feign 客户端 项目的最终的目录结构 -----eureka: 单独的项目,eureka 注册中心 -----springcloud-parents: 父项目,里面是共同的依赖,maven project 的打包类型选择pom ---------

PowerMock用法[转]

允我心安 提交于 2019-11-28 02:14:11
转:http://agiledon.github.io/blog/2013/11/21/play-trick-with-powermock/ 当我们面对一个遗留系统时,常见的问题是没有测试。正如Michael Feathers在Working Effectively with Legacy Code一书中对“遗留代码”的定义。他将其简单归纳为“没有测试的代码”。真是太贴切了!正是因为没有测试,使得我们对遗留代码的任何重构都有些战战兢 兢,甚至成为开发人员抵制重构的借口。从收益与成本的比例来看,对于这样的系统,我一贯认为不要盲目进行重构。因为重构的真正适用场景其实是发生在开发期 间,而非维护期间。当然,提升自己的重构能力,尤其学会运用IDE提供的自动重构工具,可以在一定程度上保障重构的质量。然而,安全的做法,还是需要为其 编写测试。 测试是分层的,即使是针对自动化测试。面对遗留系统,成本相对较低的是针对功能特性编写的功能测试(或者说是验收测试),这可以运用一些BDD框架 如Cucumber、JBehave等。由于它的测试粒度较粗,可以以较少的测试用例覆盖系统的主要功能。然而,它的缺点同样存在,那就是反馈周期相对较 长。这就好像你置身一个陌生的城市,在找不到路的情况下,只是跟着感觉走。走了数十公里之后,方才幡然醒悟,想起要翻一翻带在手上的地图。倘若发现方向走 错,再要回转就已经晚了

idea快捷键

萝らか妹 提交于 2019-11-27 15:49:50
-----------自动代码-------- 常用的有fori/sout/psvm+Tab即可生成循环、System.out、main方法等boilerplate样板代码 例如要输入for(User user : users)只需输入user.for+Tab 再比如,要输入Date birthday = user.getBirthday();只需输入user.getBirthday().var+Tab即可。代码标签输入完成后,按Tab,生成代码。 Ctrl+Alt+O 优化导入的类和包 Alt+Insert 生成代码(如get,set方法,构造函数等) 或者右键(Generate) fori/sout/psvm + Tab Ctrl+Alt+T 生成try catch 或者 Alt+enter CTRL+ALT+T 把选中的代码放在 TRY{} IF{} ELSE{} 里 Ctrl + O 重写方法 Ctrl + I 实现方法 Ctr+shift+U 大小写转化 ALT+回车 导入包,自动修正 ALT+/ 代码提示 CTRL+J 自动代码 Ctrl+Shift+J,整合两行为一行 CTRL+空格 代码提示 CTRL+SHIFT+SPACE 自动补全代码 CTRL+ALT+L 格式化代码 CTRL+ALT+I 自动缩进 CTRL+ALT+O 优化导入的类和包 ALT+INSERT

paper:Exploiting Query Reformulations for Web Search Result Diversification

懵懂的女人 提交于 2019-11-27 11:33:05
一. 使用查询重构来用于网页搜索结果多样性 paper本文贡献: 1. 提出了一个概率框架,这个框架显式地建模了模糊查询的信息需求---利用子查询, 2. 分析了子查询的有效性---从由三个搜索引擎提供的两种查询重构中产生的子查询 3. 全面评估了我们提出的模型的几个组成部分,自然地模拟了多样性问题的不同方面 来源: https://www.cnblogs.com/yyagrt/p/11361535.html

开发过程中项目是否需要重构?又需要注意什么?

谁都会走 提交于 2019-11-27 10:23:26
原文链接:https://www.jianshu.com/p/b95a68599528 重构是需要慎重考虑的,不是拍脑子决定的事情! 一、引言 程序员都有一颗工程师的心,所以当他们到一片新的场地想做的第一件事就是,将旧的一切推倒重来。是的,他们觉得旧代码异常混乱,因为读代码更难,宁愿丢掉旧代码重新写,也不愿意修修补补,他们认为旧代码简直一团糟。 我觉得这个出发点是好的,但我观察了非常多的案子,那些重构的项目大多数是失败的,相当一部份都成了烂尾。他们从头开始再写一遍并不意味着会写出比以前更好的代码,因为不少人没有参与到上一个版本的创建,所以其实根本不算有经验。一旦推倒重写,可能会再犯一遍版本一犯过的错,甚至会产生更多的新问题。 二、我们的项目是否需要重构? 对处于团队 Leader的我来说,重构考虑的是人力、时间、项目风险等因素,在商业项目中,推倒重来是非常危险的行为,重写项目的代码也是一个异常艰难的决定。当然,如果只是在做实验,想到新算法、SDK可以随时重写。 经过慎之又慎的考虑,重构也不是不可以的,但不是一下子推翻项目之前的所有代码,否定一切,你可能不一定会写出比以前更好的代码。结合自已的工作经验(移动端开发经验),重构主要工作从以下几个方面展开: 删除没用到的第三方库 删除不合理的第三方库,使用系统自带的或者自己造轮子 删除定义好但是没有用到的变量 删除 import

IntelliJ Idea 常用快捷键

て烟熏妆下的殇ゞ 提交于 2019-11-27 09:36:50
1. -----------自动代码-------- 常用的有fori/sout/psvm+Tab即可生成循环、System.out、main方法等boilerplate样板代码 例如要输入for(User user : users)只需输入user.for+Tab 再比如,要输入Date birthday = user.getBirthday();只需输入user.getBirthday().var+Tab即可。代码标签输入完成后,按Tab,生成代码。 Ctrl+Alt+O 优化导入的类和包 Alt+Insert 生成代码(如get,set方法,构造函数等) 或者右键(Generate) fori/sout/psvm + Tab Ctrl+Alt+T 生成try catch 或者 Alt+enter CTRL+ALT+T 把选中的代码放在 TRY{} IF{} ELSE{} 里 Ctrl + O 重写方法 Ctrl + I 实现方法 Ctr+shift+U 大小写转化 ALT+回车 导入包,自动修正 ALT+/ 代码提示 CTRL+J 自动代码 Ctrl+Shift+J,整合两行为一行 CTRL+空格 代码提示 CTRL+SHIFT+SPACE 自动补全代码 CTRL+ALT+L 格式化代码 CTRL+ALT+I 自动缩进 CTRL+ALT+O 优化导入的类和包 ALT

idea快捷键

别说谁变了你拦得住时间么 提交于 2019-11-27 08:51:06
1无处不在的跳转 1.1项目之间的跳转 2.2最近文件 2.3最近修改的文件 2.4书签 f11 和ctrl+f11 来回跳转就用crtl+数字 2.5收藏 alt+shift+f 2代码助手 2.1live template 3 postfix 4 alt +enter 创建函数。自动string.format 重构 重构常量、 来源: https://www.cnblogs.com/xjatj/p/11355623.html

重构html的下拉框select

我只是一个虾纸丫 提交于 2019-11-27 04:10:44
编辑器加载中...因为项目需要,需对html默认的下拉框select进行重构,一开始考虑利用div+css+javascript模拟下拉框,后来效果都不如人意。最终使用了jQuery-easyui的第三方组件,效果还不错,下面把使用方面介绍下: 1,导入jquery,jquery-easyui的相关js,css文件。 2,获取html的下拉框id,有朋友可能会问,不是重构了吗?为什么还要用html的下拉框,这里其实是jquery-easyui对html的下拉框包装了一层而已,主要控件是combobox. 3, 在onready方面中调用 1 function changeToComboBox(zone_list,comBoBoxId, tempTime){ 2 var width_s = $("#"+comBoBoxId).css("width")+"" ; 3 var listWidth = (parseInt(width_s.substr(0,width_s.length-2)) + 18) +"px" ; 4 var selectedComB = 0 ; 5 if (zone_list.length > 0 ) { 6 for ( var i=0;i<zone_list.length;i++ ) 7 { 8 var a_zoneName = zone_list[i]

IOS博客项目搭建-18-项目分层思想

房东的猫 提交于 2019-11-27 03:27:16
本节将对项目分层,对整个项目进行重构,首先对网络请求框架进行重构,封装。 ##目前项目存在的问题: ###1、对第三方框架依赖性太强,如AFNetworking\AFN网络请求。### 首页获取数据,发微博,如果AFN升级,新版本更新大或停止维护,那么就会出现问题,如果需要换框架则会很痛苦。 怎么解决该问题呢?经过思索后,我们可以自己封装一个HttpTool工具类,这个工具类专门用来发送网络请求,它把我们用的第三方框架封装起来,下次控制器直接请求HttpTool,如果AFN升级,只需修改HttpTool类即可,这就是分层的好处。 ###封装HttpTool网络请求工具类 ***IWHttpTool.h *** // // IWHttpTool.h // // 封装整个项目的GET\POST请求 #import <Foundation/Foundation.h> @interface IWHttpTool : NSObject /** * 发送一个POST请求 * * @param url 请求路径 * @param params 请求参数 * @param success 请求成功后的回调 * @param failure 请求失败后的回调 * */ + (void)postWithURL:(NSString *)url params:(NSDictionary *)params