复制粘贴代码真的有问题吗?

2014-08-28  来源:本站原创  分类:管理  人气:1 

当你编程的时候,复制和粘贴—将你现有的代码进行再利用,这是不必再重复编码的最佳做法。这是一个技术债务的最佳例子:偷懒,草率和目光短浅,这会让维护代码的长期成本增加。

但它同时也很自然,找一些已经在运行的代码,跟你所需要的非常像,复制,粘贴,并用它作为起点。几乎每个人都这么干过。因为有些时候,复制过来的代码不仅仅是方便,而且就算我们所需要的。

首先要清楚我讲得复制粘贴的意思。不是说从互联网上复制代码,我指的是程序员重用代码的捷径–当他们遇到的问题与他们之前在另外一个系统中遇到的问题类似的时候,他们开始用现有的代码副本,并加以改变。

在开发和设计阶段的早期,复制和粘贴并没有什么优势。代码和设计仍可塑的,这时系统需要做的是建立一套正确的抽象。这个时候没有什么好复制的。当在你开发的后期时,你已经有大量的代码,你需要维护庞大的系统,复制和粘贴就变得更加复杂。

为什么要复制粘贴?

程序员复制粘贴,因为这样可以节省时间。首先,你必须站在一个起点,你要知道你的代码要做什么事?你所要做的就是那里需要增加,哪里需要修改。你就可以专注于理解不同点。这时你变得更加自由–你可以清理你不需要的代码。这一切都很主要。因为你可能不知道你需要保留的,你需要改变的,直到你进入更深的层面。

复制和粘贴同样可以降低风险。如果你改变和扩展现有的代码,至少它运行了一段时间,通常是更安全的,并且成本较低。

如果你正在构建一个新的B2B客户界面,你会使用新的吗?通常会采用现有的接口,作为新的起点。然后看看那里需要改变,到年底的时候,你就有了2个接口,但通常需要一段的时间来理解这个代码是什么?

找到一个共同的设计,正确的抽象和变化,以支持不同的现实和异常处理。你最终的代码可能变得无法理解,难以维护,直到不得不改变—因为原来的设计没有预料到不同情况下的异常和扩展,重构只能到此结束,你需要一个全的设计和实施。

改变现有的代码,进行重构和扩展,将会让你目前的工作增加风险和成本,你不能为了适应网上的新客户而让给老客户带来问题。你需要格外的小心,你不但要明白你将要做的事每个细节(新界面),而且要明白现有界面的每个细节,它的行为和假设。

如果你认为这些改变都能被自动化测试工具捕捉到,那你就很天真了—假设你已经有良好的自动化测试工具,你需要整合现有的接口测试,这可能需要花费数周甚至数月的时间。让那些客户花费这么多的时间适应新界面,他们会不满意,因为他们都已经习惯了。

现在就复制粘贴,如果需要的话,过些日子要制定计划来重构和重新设计,是明智的选择。

什么时候该复制粘贴?

1.分叉 — 试探性的原因,如适应不同的平台或者硬件
2.模板 — 一些语言不支持某些库或者共享函数,这时有必要复制粘贴代码。
3.定制 — 临时的解决办法,只要是临时的。
4.微软克隆的做法 — 一个小组的代码给另外小组用。这时开源的通常做法,需要扩展来解决专有问题。

什么时候复制粘贴会变成问题?

什么时候复制粘贴会成为问题,有几个主要因素。

首先,你对你复制的代码理解程度是多少,你稳定程度如何,有多少潜在的bug。你总不想继承别人的问题吧。

还要知道这个代码已经拷贝了多少份?根据“三则重构”(three strikes and you refactor)原则。因为你复制了什么,并且加上改变,就带来维护上的问题。这个维护的困难就是如何理清问题,因为2个版本不足以理解哪些是共有的,哪些是特殊的。

越多次的拷贝,越多的维护上的问题。多个版本的更改和修正增加了维护的风险和成本。保持代码的同步,需要在多个系统中改变它。

虽然一些工具可以帮助你来寻找复制和粘贴的代码。随着时间的推移,不同的程序员寻找复制的副本代码变得更加艰难。有些程序员建议离职时做好复制标记,以便后来的程序员维护。

复制粘贴不是免费的。像软件里面的其它做法一样,它不是正确的或者是错误的,而是一个工具,你可以善用,也可以滥用。

意识到这些是非常重要的,假设我们有复制粘贴,我们必须为我们的工作负责。

相关文章
  • 复制粘贴代码真的有问题吗? 2014-08-28

    当你编程的时候,复制和粘贴-将你现有的代码进行再利用,这是不必再重复编码的最佳做法.这是一个技术债务的最佳例子:偷懒,草率和目光短浅,这会让维护代码的长期成本增加. 但它同时也很自然,找一些已经在运行的代码,跟你所需要的非常像,复制,粘贴,并用它作为起点.几乎每个人都这么干过.因为有些时候,复制过来的代码不仅仅是方便,而且就算我们所需要的. 首先要清楚我讲得复制粘贴的意思.不是说从互联网上复制代码,我指的是程序员重用代码的捷径–当他们遇到的问题与他们之前在另外一个系统中遇到的问题类似的时候,他们

  • js鼠标禁止右键.复制粘贴代码 2013-08-30

    其实js可以做很多的浏览器端的事情,最近有个以前的客户让帮忙修改一个功能,说是有人一直复制他们网站的信息,想有什么办法能让不复制,听后我笑了,如果我想要你前台展示的任何东东(话有点大了),都可以弄到,不过客户是上帝嘛,他要这个效果就帮忙加嘛,举手之劳,其实就是用js禁止鼠标右键就可以了,还有一种js就是直接禁止复制粘贴功能.这些效果都是可以的.废话不多说,看看代码吧! 禁止鼠标右键:oncontextmenu="return false":(置于body标签中) 禁止选择:onsele

  • java简单实现复制 粘贴 剪切功能代码分享 2014-03-19

    本文给大家分享了一段java编写的简单实现复制粘贴剪切功能的代码,需要的小伙伴可以直接拿走使用.如有更好的方案,也可以告之本人. 废话不多说,直接上代码,小伙伴们仔细看下注释吧. /*简单的复制 剪切 粘贴 功能 操作: 复制测试: 输入文本选择文本,点击复制,然后将光标放在右边的TextArea,点击粘贴 剪切测试:输入文本选择文本,然后将光标放在右边的TextArea,点击剪切 */ import javax.swing.*; import java.awt.*; import java.a

  • JS input文本框禁用右键和复制粘贴功能的代码 2014-10-11

    由于项目要求,有些文本框需要禁用掉右键和复制粘贴的功能,昨天刚刚用JS实现. function click(e) { if (document.all) { if (event.button==1||event.button==2||event.button==3) { oncontextmenu='return false'; } } if (document.layers) { if (e.which == 3) { oncontextmenu='return false'; } } } i

  • SWT(JFace)体验之复制粘贴 2013-12-20

    SWT(JFace)体验之复制粘贴 演示代码如下: package swt_jface.demo11; import org.eclipse.swt.SWT; import org.eclipse.swt.dnd.Clipboard; import org.eclipse.swt.dnd.RTFTransfer; import org.eclipse.swt.dnd.TextTransfer; import org.eclipse.swt.dnd.Transfer; import org.ecl

  • 复制粘贴功能的Python程序 2014-08-25

    接下来,由于我觉得手动复制粘贴这29000条插入语句实在是太痛苦了,所以打算用Python来完成这项工作.这是我第一次自己动手写Python代码,感觉还挺顺利的. 今天因为给BeauBeau提供的抽奖号码做SQL文件,一开始收到ZIP文件解开压缩之后被吓到了--29个CSV文件,每个文件保存了1000个奖券ID和号码-_-! 照上次一样,打开每个CSV文件做先做单独的SQL文件,每个SQL中有1000条插入语句,随后将29个文件的所有SQL语句都复制粘贴到同一个总的SQL文件中. CSV文件中的

  • 探索PowerShell (八) 数组.哈希表(附:复制粘贴技巧) 2014-09-15

    我们经常在程序设计中用到的数组,同样在脚本中很常用.本节就详细介绍一下数组,以及哈希表在PowerShell中的使用 我们经常在程序设计中用到的数组,同样在脚本中很常用.本节就详细介绍一下数组,以及哈希表在PowerShell中的使用. 数组 在PowerShell中,声明一个变量为数组时,需要使用符号"@",例如: [email protected](""user1","user2","user3) <enter> 这样,我

  • android 复制 粘贴 剪切功能应用 2015-01-14

    网上有很多android 复制 粘贴 剪切功能的文章,只是放到自己的程序中不知道如何处理,现在寻得一可行方法,需要的朋友可以参考下 网上有很多复制粘贴的文章,只是放到自己的程序中不知道如何处理,现在寻得一可行方法如下: Android的剪切板(ClipboardManager) 注意:导包的时候 API 11之前: android.text.ClipboardManager API 11之后: android.content.ClipboardManager /** * 实现文本复制功能 * @

  • 电子文稿不能复制粘贴的破解方法 2014-09-07

    1.将Internet的安全级别设置为"高".操作方法: ①启动IE→点击菜单"工具"中"Internet选项"→点"安全"→自定义级别→选择"安全级-高"→确定→按F5"刷新": 这时你就可复制了,因为安全级别最高的时候,一切控件和脚本均不能运行,再厉害的网页限制手段统统全部作废: ②复制后改回原来的安全级别设置,不然会影响正常上网. 2.将Internet的所有"脚本&qu

  • Eclipse/MyEclipse中使用复制粘贴功能卡的解决办法 2013-05-21

    最近在MyEclipse中编辑代码时,使用快捷键进行复制粘贴,经常会导致编辑器短暂的停顿,光标不跟随,居然反应不过来,几近假死. 想来想去应该是编辑上的什么配置或者是IDE的什么功能导致,于是进入Preferences查找edit功能,进行一个个的测试,最后发现原来是代码的超链功能导致. 进入方法:Window -> Preferences -> General -> Editors -> Text Editors -> Hyperlinking 把超链的快捷键改为其他键比如

  • 三星手机 Samsung Galaxy S3 无法复制粘贴的不完美解决方法 2013-10-12

    问题简单描述 从上周开始我的Samsung Galaxy S3手机就无法实现复制粘贴功能了,每次复制时都提示复制到了剪贴板,但是粘贴时就会发现根本粘贴不了,无法打开剪贴板.真的是莫明其妙啊,我的手机没有Root过,从买回来之后已经半年左右,到现在壹直使用正常,没有出过什么问题,这是第壹次遇到这麽奇怪的问题. 将手机解锁之后再清空系统剪贴板 实在是想不出来为什么,无奈只好先在网上Google了壹把,用关键字"Galaxy s3 无法复制粘贴"搜索了下,第壹個结果就是问题的解决方案,网友给

  • Vim 复制粘贴探秘 2014-05-14

    Vim作为最好用的文本编辑器之一,使用vim来编文档,写代码实在是很惬意的事情.每当学会了vim的一个新功能,就会很大地提高工作效率.有人使用vim几十年,还没有完全掌握vim的功能,这也说明了vim的强大.而这样何尝不是一件好事呢,只要有的学习,就有的提高. 最近使用Vim来写博客,发现在Vim中粘贴Python代码后,缩进就全乱了.仔细研究了以下,原来是自动缩进的缘故,于是做如下设置: :set noai nosi 取消了自动缩进和智能缩进,这样粘贴就不会错行了.但在有的vim中不行,还是排

  • 微软谈Windows Phone 7:手机用户不需要复制粘贴功能 2014-01-13

    虽然微软在Mix 2010大会上曾表示Windows Phone 7不支持复制粘贴,这一消息让很多人不解,也有人认为微软只是来不及在年底发布该系统时提供该功能,今后的升级版本则会提供复制粘贴功能.对于这些猜测,微软再次进行了澄清. 微软表示,Windows Phone 7系统不包括复制粘贴功能并不是疏忽或是时间问题,这是开发团队深思熟虑后的决定.根据微软的用户调查,手机用户并不是十分频繁地使用复制粘贴功能,而且 Windows Phone 7中提供了全系统数据检测服务,可以在全系统范围内识别电话

  • cmd 命令行下复制.粘贴的快捷键 2014-04-30

    cmd 命令行下复制.粘贴的快捷键,方便快速的在cmd操作复制粘贴. 嗯,从最开始说吧,操作系统:XP,准备工作: 1.单击左下角"开始"菜单,选择"运行",输入"cmd". 2.在弹出的cmd窗口的标题栏上点击"右键",选择"属性". 3.在弹出的对话框中选择"选项"这个选项卡,在"编辑选项"区域中勾选"快速编辑模式",如图所示,然后"

  • firefox(火狐)和ie浏览器禁止右键和禁止复制的代码 2014-10-18

    多浏览器兼容的禁止右键和禁止复制的代码. 脚本之家 脚本之家 脚本之家是一个专业的收集各类脚本学习资料的网站,尽量修正错误打造精品脚本类学习网站,我们为大家游戏脚本资源,源码,软件,asp,php,javascript等编程资料,是网页制作,网络编程,网站建设人士的聚集场所. [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

  • Windwos服务器远程桌面不能复制粘贴的解决方法 2014-12-10

    这篇文章主要介绍了Windwos服务器远程桌面不能复制粘贴的解决方法,本文讲解了两种不能复制粘贴的情况和各自的解决方法,需要的朋友可以参考下 今天使用远程桌面连接登陆服务器,发现不能在本地电脑和远程服务器之间复制粘贴文件了,复制粘贴文本也不行. 网上搜了一下,主要有两种情况: 1.复制粘贴功能原本可以用,突然失灵了 2.从头到尾都无法使用这个复制粘贴功能 针对第一种情况,只需重启一下rdpclip.exe就可以了. 步骤: 1.打开任务管理器,查看进程,如果有 rdpclip.exe 进程,先关

  • Java Clone(类的复制)实例代码 2015-04-01

    Java Clone(类的复制)实例代码,需要的朋友可以参考一下 自己实现了一遍: public class A implements Cloneable { public String str[]; A() { str = new String[2]; } public Object clone() { A o = null; try { o = (A) super.clone(); } catch (CloneNotSupportedException e) { e.printStackTr

  • Windows Phone 复制粘贴:"女王" 的故事 2014-03-28

    故事的主角叫做 Priyanka Singhai,她是 Windows Phone "复制/粘贴" 的项目组长,团队成员们亲切的称她为:"复制/粘贴" 女王 .从 Singhai 的个人经历来看,成为 "复制/粘贴" 小组的领头人是她的命运.2004 年离开印度老家加入到集团内部的 Office for Mac 部门,Singhai 的第一份工作就是修缮文本编辑功能.多年的工作经验,让她对文字处理颇有心得,以下是记者 Michael Stroh

  • Windows Phone 7升级版或将支持复制粘贴 2014-10-19

    微软在MIX 2010大会的问答环节上曾表示,Windows Phone 7系统在发布时不会支持复制粘贴功能.这无疑让很多用户感到失望,苹果iPhone就因为不支持复制粘贴而遭受着用户的非议,如今微软要重蹈覆辙? 一位Windows Phone 7系统开发人员近日透露,复制粘贴功能包含在Windows Phone 7团队的开发列表中,开发人员为该功能已经考虑了很多实现方案,并且计划在系统正式发布不久后添加到WP7平台中. 不要忘记,Windows Mobile是支持复制粘贴的,或许微软无法在Wi

  • FireFox不能复制/粘贴的解决方法 2015-01-29

    被这个问题困扰一段时间了,当时用的是FireFox 3.5,当复制/粘贴操作比较多的时候,就会出现不能复制/粘贴的问题,清除FireFox缓存就能恢复正常.卸载重装FireFox 3.5不能解决问题:根据Clipboard not working的文档,在注册表中删除AppInit_DLLs也不能解决问题. 后来看到FireFox 3.6 beta 2出来了,于是安装FireFox 3.6 beta 2试了一下,问题竟然解决了,看来还是FireFox的某个Bug引起的.