当前位置:  开发笔记 > 数据库 > 正文

复制粘贴编码是否可以接受?

如何解决《复制粘贴编码是否可以接受?》经验,为你挑选了5个好方法。

它通常认为,复制和粘贴编程是一个坏主意,但什么是处理,你有两种功能或代码块的情况下最好的办法,真正需要在短短的方式不同品牌推广他们非常凌乱?

如果代码基本相同,除了一些小的变化,但是那些微小的变化不是通过添加参数,模板方法或类似的东西很容易分解的东西怎么办?

更一般地说,您是否曾经遇到过这样一种情况,即您承认一点点复制粘贴编码是真正合理的.



1> Tim Jarvis..:

问这个关于你的功能的问题

"如果这个小要求发生变化,我是否必须改变这两个功能才能满足它?"



2> Charlie Mart..:

当然,它有时是可以接受的.这就是人们保留片段文件的原因.但是,如果您经常剪切和粘贴代码,或者使用多行代码,那么您应该考虑将其作为子例程.为什么?因为你必须改变一些东西,这样,你只需要改变一次.

中间情况是使用宏,如果你有这样的可用.



3> Øyvind Skaar..:

我听说有人说会复制和粘贴一次(限制重复代码到最多两个实例),因为除非你在三个或更多地方使用代码,否则抽象不会得到回报.()我自己,一旦看到需要,我就试着让它成为重构的好习惯.


是的,关于重构的规范书(Martin Fowler)说"三次罢工,你重构".如果你正在使用两次,它可能没问题,但是如果你第三次看到它,你就应该*重构.

4> chaos..:

是的,就像你说的那样; 较小但很难因素的变化.如果情况确实如此,请不要鞭挞自己.



5> Franz See..:

Re是切入和过去可以接受的:

是.当细分市场略有不同时,您正在使用一次性系统(系统存在的时间非常短,不需要维护).否则,通常更好地提取出共性.

Re段看起来像是一样但不完全相同:

如果差异在于数据,则通过提取函数并使用数据中的差异作为参数来重构(如果要将数据作为参数传递太多,请考虑将它们分组到对象或结构中).如果差异在函数的某个进程中,则使用命令模式或抽象模板进行重构.如果即使使用这些设计模式仍然很难重构,那么您的功能可能会尝试自己处理许多责任.

例如,如果您的代码段在两个段中有所不同 - diff#1和diff#2.在diff#1中,你可以拥有diff1A或diff1B,而对于diff#2你可以拥有diff2A和diff2B.

如果diff1A和diff2A总是在一起,并且diff1B和diff2B总是在一起,那么diff1A和diff2A可以包含在一个命令类或一个抽象模板实现中,diff1B和diff2B可以包含在另一个中.

但是,如果有几种组合(即diff1A和diff2A,diff1A和diff2B,diff1B和diff2A,diff1B和diff2B),那么你可能想重新考虑你的功能,因为它可能试图自己处理太多的责任.

重新SQL语句:

使用逻辑(if-else,循环)动态构建SQL会牺牲可读性.但是创建所有SQL变体将很难维护.所以遇到中途并使用SQL Segments.将共性作为SQL段提取出来,并将这些SQL段作为常量创建所有SQL变体.

例如:

private static final String EMPLOYEE_COLUMNS = " id, fName, lName, status";

private static final String EMPLOYEE_TABLE = " employee";

private static final String EMPLOYEE_HAS_ACTIVE_STATUS = " employee";

private static final String GET_EMPLOYEE_BY_STATUS =
  " select" + EMPLOYEE_COLUMNS + " from" + EMPLOYEE_TABLE + " where" + EMPLOYEE_HAS_ACTIVE_STATUS;

private static final String GET_EMPLOYEE_BY_SOMETHING_ELSE =
  " select" + EMPLOYEE_COLUMNS + " from" + EMPLOYEE_TABLE + " where" + SOMETHING_ELSE;

推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有