面試過程中又面試官問代碼的結(jié)構(gòu),我不想說領(lǐng)域模型設(shè)計,因?yàn)槲艺莆詹涣司?,更何況我們是做tob的服務(wù),需求和bug一大坨,再好的設(shè)計也比不上甲方我需要這個功能,更沒時間去梳理什么設(shè)計和層次,只能盡量減少重復(fù)的代碼和共用。我剛?cè)肼毜墓镜臅r候完全的controller->service->dao一個類能達(dá)到上萬行,一個方法能達(dá)到幾千行,還不敢改。更不用說什么微服務(wù)。后來系統(tǒng)出現(xiàn)了瓶頸,優(yōu)化代碼和系統(tǒng)時,才算重構(gòu)了一次。
我只是想梳理下載重構(gòu)系統(tǒng)時如何減少的重復(fù)的代碼,明確每個類各自的職責(zé)。參考了領(lǐng)域模型驅(qū)動設(shè)計這本書,但我運(yùn)用的只是很淺很淺的層次,每個包下面存放的都是一類的業(yè)務(wù),具體包下面還有包分別是controller,service,repository,dao,entity,moudle。dao是連接數(shù)據(jù)庫用的類用的是mybatis框架,repository作用是操作dao,多個dao類可以共用一個repository,代表同一類業(yè)務(wù),比如主表和明細(xì)表可以共用一個repository類,目的是減少重復(fù)的代碼,service只能訪問repository,因?yàn)槲覀兪莟ob的業(yè)務(wù),所以業(yè)務(wù)相對來說比較復(fù)雜,所以每個包下面的service包有個共用的xxService,這個標(biāo)準(zhǔn)service適用于標(biāo)準(zhǔn),比較簡單的邏輯,,至于其他復(fù)雜的邏輯則需要另行討論和設(shè)計。一個方法盡量不超過80行,一旦一個類超過了一千行就要考慮拆分多個service類,同樣每天可能會有一個比較資深的人員過下代碼并且還要熟悉業(yè)務(wù),為了減少代碼,一旦一個service方法沒有被引用即使刪除。