软件腐化的七个特征之僵化性和脆弱性(设计模式原则的反面) (《敏捷软件开发》读书总结第一篇)
文章目錄
- 前言
- 僵化性(Rigidity)
- 原文
- 我的理解
- 脆弱性(Fragility)
- 原文
- 我的理解
前言
最近讀Robert C. Martin(Bob大叔)的書《敏捷軟件開發》,準備圍繞這本書開一個專題來寫點讀書總結。本文是這個專題的第一篇。
設計模式有六大原則:單一原則;里氏替換原則;依賴倒置原則;接口隔離原則;迪米特原則;開閉原則。軟件腐化可以理解為是設計模式六大原則的對立面。
當軟件出現以下七種特征之一時,就說明軟件正在腐化:僵化性(Rigidity)、脆弱性(Fragility)、牢固性(Immobility)、粘滯性(Viscosity)、不必要的復雜性(Needless Complexity)、不必要的重復(Needless Repetition)、晦澀性(Opacity)。
僵化性(Rigidity)
原文
很難對系統進行改動,因為每個改動都會迫使許多對系統其他部分的其他改動。
我的理解
僵化性(Rigidity)和下面講的脆弱性(Fragility),都是在操作公用資源或者調用公用方法時最常見,當我們對系統進行改動時,所需改動的內容已經和已有內容發生耦合。
脆弱性(Fragility)
原文
對系統的改動會導致系統中和改動的地方在概念上無關的許多地方出現問題。
我的理解
以我現在項目的架構為例:數據庫直接為 Web后端(使用.NET開發) 和 數據分析端(使用Python開發) 兩者提供服務,換句話說, Web后端 和 數據分析端 都是直接訪問和維護數據庫。但是,當我們在 Web后端 里使用ORM映射數據庫時,造成了一些耦合,這將影響到 數據分析端 對數據庫的訪問和維護。
下面是使用微軟的ORM框架創建數據庫時,所遇到的兩種場景。
場景1:
場景2:
場景1采取 CodeFirst模式(代碼優先模式) ------先創建Web后端模型層代碼,然后通過Web后端模型層代碼自動生成數據庫并完成映射;場景2采取 DBFirst(數據庫優先模式) ------先創建數據庫,然后通過數據庫來生成Web后端模型層代碼并完成映射。
場景1中,數據庫由 Web后端開發工程師 獨自維護(因為數據庫由EF代碼生成而來),此場景下, 數據分析師 如果想要在數據庫里修改表結構,需要去找 Web后端開發工程師,由 Web后端開發工程師 先修改EF模型層代碼,然后再把改動映射到數據庫上去。但是在實際工作過程中, 數據分析師 經常忘了這樣去做,而是自己直接去修改數據庫,這就會造成 Web后端模型層代碼 和數據庫映射時對不上,Web后端的代碼就會發生一些莫名其妙的Bug。所以,選擇使用 CodeFirst模式 ,在我們實際項目的場景中就產生了 脆弱性(Fragility)。
為了解決上述 脆弱性(Fragility) 問題,我們選擇用場景2的 DBFirst模式 去替代場景1的 CodeFirst模式 。數據庫由 后端開發工程師 和 數據分析師 共同維護,每次Web后端在使用數據庫前,從數據庫往 Web后端模型層 手動更新一遍即可,由 數據分析師 所做的數據庫改動就將同步更新到 Web后端模型層 中。
總結
以上是生活随笔為你收集整理的软件腐化的七个特征之僵化性和脆弱性(设计模式原则的反面) (《敏捷软件开发》读书总结第一篇)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 3Dmax学习质感细节立体_记录一下
- 下一篇: 【云原生】理解k8s中的Pod和容器设计