重建模與重構的區別
Refactoring is tactical, remodelling is strategic.
重構是戰術性的! 重新建模是戰略性的。
重構好像已經變成了提高軟體質量的專有名詞,這個詞語是由Martin Fowler提出,並專門出版了兩版的《重構》書籍,被譽為“聖書寶典”。
但是DDD社群提出了:重構只是一種戰術手段,重新建模才是戰略方向,如果一個系統的業務模型或業務邏輯或核心演算法都發生了問題,在錯誤的戰略方向上做得無論多完美,也是徒勞,也是南轅北轍。
重構與重新建模是兩個層面,重構的範圍侷限在技術架構層面,目標是為了提高可組合性,但不是為了可複用性,組合性雖然表面上也呈現複用,其實更多是一種管道pipleline或流stream的作用。可組合性是軟體的摩爾定律,會對整個複雜系統例如社會系統產生蝴蝶效應。重構是與業務上下文無關的。
重新建模是與業務上下文相關,這也是可複用性很美好但是很難實現,因為業務上下文是不同的,如何實現複用呢?就是同一個行業比如全國社保,各地社保政策還是不同,所以無法納入一個可複用的全國社保系統,各個省社保只能重新建模。
重構與重新建模在規模上也是不同的,重構是一種漸進式發展,類似修修補補又三年,然後通過扼殺者模式將舊系統卸除刪除,這種方式看上去很好,但是致命問題是忽視複雜系統的整體性,人為介入複雜系統本身也會給系統帶來致命打擊,系統中雖有bug,但是總體還正常,如果你修復了bug,系統反而不能執行了,你傻眼不?說明系統內部是耦合的,錯綜複雜的,從哪裡開始修,開始補,不是像補衣服那樣一目瞭然。這也是物理還原論或傳統分析分解思維的缺陷,今年諾貝爾物理獎和經濟學獎頒給複雜系統研究也是說明這點。
重新建模是傷筋動骨的大手術,可能意味著重寫,當然你也可以追隨潮流認為這是重構,Evans在他的DDD書籍中也認為對股份share pie重新建模是一種重構。其實是不嚴謹的,或者說他可能自己也沒有意識到,這是重新建模,不是重構啦。
參考:
DDD中如何藉助行業術語突破性發現領域模型? - Mathias
相關文章
- Java—重寫與過載的區別Java
- 幽默:重建模、重建和重構
- C++中過載、重寫、重定義的區別C++
- 方法重置和重寫的區別
- 過載和重寫的區別
- 【小白學PyTorch】4 構建模型三要素與權重初始化PyTorch模型
- 物件導向重寫(override)與過載(overload)區別物件IDE
- 系統重構的道與術
- 程式碼重構與單元測試——“提取方法”重構(三)
- 10.int和Integer的區別(重點)
- 程式碼重構與單元測試——重構1的單元測試(四)
- 重構
- 事件風暴EventStorming與事件建模EventModeling的區別 | rafalmaciag事件ORMMac
- 程式碼重構:類重構的 8 個小技巧
- 程式碼重構與單元測試——對方法的引數進行重構(五)
- 程式碼重構之法——方法重構分析
- 網路重構的進展與挑戰
- 重構:你可能不知道的重構場景
- 程式碼重構:函式重構的 7 個小技巧函式
- 重構的原則
- 建模分析師與演算法工程師的主要區別演算法工程師
- 原型重構原型
- JS 程式碼的簡單重構與優化JS優化
- 淺談C#中重寫和隱藏的區別C#
- DDD和OO的重要區別:上下文重於抽象抽象
- Mysql RC/RR隔離原理和區別 不可重複讀和可重複讀MySql
- 切片去重(string,int型別去重)型別
- 出庫重構
- Android 重構方案Android
- 瞭解重構
- Kruskal重構樹
- Kruskal 重構樹
- win10重置和重灌哪個好 win10重置和重灌的區別Win10
- sqlserver索引重建和索引重組的區別和操作方法SQLServer索引
- 重構改善既有的程式碼設計(重構原則)
- Python教程:異常捕捉與程式碼重構Python
- 程式碼重構與單元測試(一)
- 程式碼重構與單元測試——重構6:使用“多型”取代條件表示式(九)多型