色尼玛亚洲综合影院,亚洲3atv精品一区二区三区,麻豆freexxxx性91精品,欧美在线91

重構(gòu)之美之一避免復(fù)制與粘貼

  在開發(fā)過程中,當(dāng)你發(fā)現(xiàn)代碼可以Copy-paste時(shí),就意味著代碼出現(xiàn)了重復(fù)。這是一種典型的反模式。William J.Brown等在著作AntiPatterns-Refactoring Software,Architecture, and Projects in Crisis(即《反模式——危機(jī)中軟件、架構(gòu)和項(xiàng)目的重構(gòu)》)中認(rèn)為這種形式的復(fù)用讓開發(fā)的代碼行數(shù)量虛假地增加,但是不能像其他形式的復(fù)用一樣降低成本。Copy-Paste代碼的方式違背了DRY(即不要重復(fù)你自己)原則,使得多處地方出現(xiàn)了同樣或者相似的代碼。這是一種征兆,一旦在方法中或方法之間開始Copy-Paste操作,就意味著需要采用Extract Method重構(gòu)手法。在提取方法之后,還可以根據(jù)情況利用Move Method重構(gòu)手法,將其搬移到一個(gè)類中,然后在原來的調(diào)用處轉(zhuǎn)為對(duì)該類方法的調(diào)用。或者利用Replace Method with Method Object,將這些職責(zé)封裝為專有的類。  

  在我的編程生涯中,碰到類似Copy-Paste的情況簡(jiǎn)直不勝枚舉。在一次項(xiàng)目中,我們對(duì)開源項(xiàng)目JASPer Report進(jìn)行了擴(kuò)展。我們加入了對(duì)新報(bào)表類型(CJT_REPORT)的支持。在ReportParameterAction類中,我們需要對(duì)報(bào)表對(duì)象ReportUnit判斷報(bào)表類型。于是,我在ReportParameterAction類中定義了如下的私有方法: 

private void setReportUnitTypeByFileResource(ReportUnit reportUnit) { 
final String JS_FILE_TYPE
= "jrxml";
ResourceReference reference
= reportUnit.getMainReport();
if (reference.isLocal()) {
FileResource resource
= (FileResource)reference.getLocalResource();
String fileType
= resource.getFileType();
if (fileType.toLowerCase().equals(JS_FILE_TYPE)){
reportUnit.setReportType(ReportUnit.JS_REPORT);
}
else {
reportUnit.setReportType(ReportUnit.CJT_REPORT);
}
}
}

it知識(shí)庫重構(gòu)之美之一避免復(fù)制與粘貼,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 渑池县| 壤塘县| 沈丘县| 通州区| 定边县| 金川县| 若羌县| 凤山市| 晋江市| 宁国市| 沛县| 门源| 镇巴县| 射阳县| 无极县| 北流市| 临武县| 枣强县| 平南县| 湘西| 夏津县| 昌宁县| 清徐县| 东明县| 平潭县| 大邑县| 丹巴县| 澄江县| 桂东县| 上蔡县| 牡丹江市| 易门县| 邵武市| 敦煌市| 徐闻县| 天峨县| 承德市| 金堂县| 突泉县| 通海县| 渭源县|