代碼重構(gòu)異曲同工的類(lèi)(alternative classes with different interfaces)

      網(wǎng)友投稿 1168 2022-05-30

      什么是異曲同工的類(lèi)(alternative classes with different interfaces)

      定義: 異曲同工的類(lèi)——兩個(gè)類(lèi)功能一致,卻有不同的定義(方法/接口)

      影響: 相關(guān)的業(yè)務(wù)邏輯可能會(huì)重復(fù)實(shí)現(xiàn),或分布到不同類(lèi)中,代碼難維護(hù)

      改進(jìn)目標(biāo): 統(tǒng)一接口、相同的功能只實(shí)現(xiàn)一份

      方法: 函數(shù)改名、搬移函數(shù)、添加參數(shù)、函數(shù)參數(shù)化、提煉超類(lèi)、移除子類(lèi)

      注:

      狹義的異曲同工:兩個(gè)類(lèi)功能完全相同;

      廣義的異曲同工:兩個(gè)類(lèi)有很多相同的功能,從抽象角度看它們也有高一致性,卻沒(méi)有共同的基類(lèi)/接口。

      案例1

      代碼背景

      有個(gè)制造工廠(ManufactureService);

      它雇用了雇員(Employee)把原料(Material)加工成產(chǎn)品(Product);

      它也雇用了工人(Worker)把原料(Material)加工成產(chǎn)品(Product);

      其實(shí),雇員(Employee)和工人(Worker)邏輯上等價(jià)

      癥狀/問(wèn)題

      “異曲同工的類(lèi)”讓人困惑。從局部看,它們有著不同的函數(shù)接口;從整體看,它們像是同樣的東西。分別看Employee和Worker的函數(shù):

      ?ID:identity vs id;

      ?性別:booleanvs Sex枚舉;

      ?某方法:setValuesvs setProperties;

      ?加工產(chǎn)品的方法:ManufactureService.createProductUsingEmployee() vs Worker.produce()

      案例1的改進(jìn)目標(biāo)

      改進(jìn)目標(biāo)

      相同的類(lèi)只留一個(gè)(本例中留Worker);

      改進(jìn)步驟

      統(tǒng)一Employee和Worker的函數(shù)簽名(含:函數(shù)名、參數(shù)列表、返回值、異常申明),使兩個(gè)類(lèi)等價(jià);

      查漏補(bǔ)缺類(lèi)功能(如:Employee中不含加工產(chǎn)品的函數(shù))

      把Employee全部用Worker替代

      刪除Employee類(lèi)

      案例2

      代碼背景

      有個(gè)銷(xiāo)售管理系統(tǒng),其中有:

      報(bào)價(jià)單Quotation,含:序列號(hào)、買(mǎi)家、創(chuàng)建時(shí)間、報(bào)價(jià)明細(xì)、報(bào)價(jià)有效期、并能轉(zhuǎn)化為訂單、重新報(bào)價(jià)……;

      銷(xiāo)售訂單SalesOrder,含:序列號(hào)、買(mǎi)家、創(chuàng)建時(shí)間、價(jià)格明細(xì)、收貨地址、支付信息、并能創(chuàng)建出庫(kù)單……;

      癥狀/問(wèn)題

      Quotation和SalesOrder共享了一些功能,但沒(méi)有共同的基類(lèi)/接口:

      相同點(diǎn):序列號(hào)、買(mǎi)家、創(chuàng)建時(shí)間、價(jià)格明細(xì)……

      差異點(diǎn):

      ?Quotation:報(bào)價(jià)有效期、轉(zhuǎn)化為訂單、重新報(bào)價(jià)……

      ?SalesOrder:收貨地址、支付信息、創(chuàng)建出庫(kù)單……

      邏輯重復(fù)、代碼重復(fù)

      案例2的改進(jìn)目標(biāo)

      改進(jìn)目標(biāo)

      代碼重構(gòu):異曲同工的類(lèi)(alternative classes with different interfaces)

      消除重復(fù)、消除混淆;

      重構(gòu)對(duì)比(案例1)

      重構(gòu)對(duì)比(案例2)

      總結(jié)

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:Google Earth Engine ——非洲土壤蒸發(fā)和截流(ETIa)數(shù)據(jù)集
      下一篇:百度RocketQA系列搜索技術(shù)論文解析(三)
      相關(guān)文章
      亚洲色www永久网站| 亚洲成_人网站图片| 亚洲成a人片在线观看久| 亚洲一卡2卡3卡4卡5卡6卡| 亚洲国产片在线观看| 亚洲成人一级电影| 亚洲香蕉免费有线视频| 99人中文字幕亚洲区| 久久久久亚洲AV无码永不| 337p日本欧洲亚洲大胆色噜噜| 久久久久亚洲AV成人无码网站| 久久综合日韩亚洲精品色| 亚洲AV无码久久寂寞少妇| 亚洲成年人在线观看| 亚洲午夜视频在线观看| 亚洲男人天堂av| 亚洲视频在线不卡| 亚洲成人黄色在线| 亚洲成AV人综合在线观看| 亚洲一区二区三区国产精品无码| 亚洲人成网站日本片| 久久亚洲精品国产亚洲老地址| 亚洲中文字幕无码久久2020| 亚洲啪AV永久无码精品放毛片| 337P日本欧洲亚洲大胆精品| 亚洲AV无码精品国产成人| 另类图片亚洲校园小说区| 亚洲国产成人久久综合区| 美腿丝袜亚洲综合| 亚洲国产成人一区二区精品区| 亚洲狠狠久久综合一区77777| 亚洲高清中文字幕| 中文日韩亚洲欧美制服| 美国毛片亚洲社区在线观看| 亚洲精品一级无码鲁丝片| 亚洲精品无码久久久久sm| 亚洲狠狠综合久久| 亚洲AV成人噜噜无码网站| 亚洲大码熟女在线观看| 亚洲人午夜射精精品日韩| 久久久久久久尹人综合网亚洲|