無(wú)代碼開(kāi)發(fā)平臺(tái)(國(guó)內(nèi)無(wú)代碼開(kāi)發(fā)平臺(tái)推薦)">國(guó)內(nèi)無(wú)代碼開(kāi)發(fā)平臺(tái)(國(guó)內(nèi)無(wú)代碼開(kāi)發(fā)平臺(tái)推薦)
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)
消除重復(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)容。