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