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