重建模與重構的區別

banq發表於2021-10-21

Refactoring is tactical, remodelling is strategic.

重構是戰術性的!  重新建模是戰略性的。

重構好像已經變成了提高軟體質量的專有名詞,這個詞語是由Martin Fowler提出,並專門出版了兩版的《重構》書籍,被譽為“聖書寶典”。

但是DDD社群提出了:重構只是一種戰術手段,重新建模才是戰略方向,如果一個系統的業務模型或業務邏輯或核心演算法都發生了問題,在錯誤的戰略方向上做得無論多完美,也是徒勞,也是南轅北轍。

重構與重新建模是兩個層面,重構的範圍侷限在技術架構層面,目標是為了提高可組合性,但不是為了可複用性,組合性雖然表面上也呈現複用,其實更多是一種管道pipleline或流stream的作用。可組合性是軟體的摩爾定律,會對整個複雜系統例如社會系統產生蝴蝶效應。重構是與業務上下文無關的。

重新建模是與業務上下文相關,這也是可複用性很美好但是很難實現,因為業務上下文是不同的,如何實現複用呢?就是同一個行業比如全國社保,各地社保政策還是不同,所以無法納入一個可複用的全國社保系統,各個省社保只能重新建模。

重構與重新建模在規模上也是不同的,重構是一種漸進式發展,類似修修補補又三年,然後通過扼殺者模式將舊系統卸除刪除,這種方式看上去很好,但是致命問題是忽視複雜系統的整體性,人為介入複雜系統本身也會給系統帶來致命打擊,系統中雖有bug,但是總體還正常,如果你修復了bug,系統反而不能執行了,你傻眼不?說明系統內部是耦合的,錯綜複雜的,從哪裡開始修,開始補,不是像補衣服那樣一目瞭然。這也是物理還原論或傳統分析分解思維的缺陷,今年諾貝爾物理獎和經濟學獎頒給複雜系統研究也是說明這點。

重新建模是傷筋動骨的大手術,可能意味著重寫,當然你也可以追隨潮流認為這是重構,Evans在他的DDD書籍中也認為對股份share pie重新建模是一種重構。其實是不嚴謹的,或者說他可能自己也沒有意識到,這是重新建模,不是重構啦。

參考:

DDD中如何藉助行業術語突破性發現領域模型? - Mathias

Share Pie: 隱藏的DDD寶藏 -Nick

重建模與重構的區別

 

相關文章