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