摘要:開閉原則軟件實體類,模塊,函數(shù)應該是可以擴展的,而不是修改。函數(shù)并不符合開閉原則,因為一旦有新動物出現(xiàn),它需要修改代碼。
原文
面向?qū)ο蟮木幊填愋蜑檐浖_發(fā)帶來了新的設計。
這使開發(fā)人員能夠在一個類中組合具有相同目的/功能的數(shù)據(jù),來實現(xiàn)多帶帶的一個功能,不必關(guān)心整個應用程序如何。
但是,這種面向?qū)ο蟮木幊踢€是會讓開發(fā)者困惑或者寫出來的程序可維護性不好。
為此,Robert C.Martin指定了五項指導方針。遵循這五項指導方針能讓開發(fā)人員輕松寫出可讀性和可維護性高的程序
這五個原則被稱為S.O.L.I.D原則(首字母縮寫詞由Michael Feathers派生)。
S:單一責任原則
O:開閉原則
L:里式替換
I:接口隔離
D:依賴反轉(zhuǎn)
我們在下文會詳細討論它們
筆記:本文的大多數(shù)例子可能不適合實際應用或不滿足實際需求。這一切都取決于您自己的設計和用例。這都不重要,關(guān)鍵是您要了解明白這五項原則。
提示:SOLID原則旨在用于構(gòu)建模塊化、封裝、可擴展和可組合組件的軟件。Bit是一個幫助你踐行這些原則的強大工具:它可以幫助您在團隊中大規(guī)模地在不同項目中輕松隔離,共享和管理這些組件.來試試吧。
Bit
你也可以在這里學習更多關(guān)于SOLID原則和Bit的東西。
?單一責任原則“......你有一份工作” - Loki來到雷神的Skurge:Ragnarok一個類只實現(xiàn)一個功能
一個類應該只負責一件事。如果一個類負責超過一件事,就會變得耦合。改功能的時候會影響另外一個功能。
筆記:該原則不僅適用于類,還適用于軟件組件和微服務。
舉個例子,考慮這個設計:
class Animal { constructor(name: string){ } getAnimalName() { } saveAnimal(a: Animal) { } }
這個Animal類違反了SRP(單一責任原則)
怎么違反了呢?
SRP明確說明了類只能完成一項功能,這里,我們把兩個功能都加上去了:animal數(shù)據(jù)管理和animal屬性管理。構(gòu)造函數(shù)和getAnimalName方法管理Animal的屬性,然而,saveAnimal方法管理Animal的數(shù)據(jù)存儲。
這種設計會給以后的開發(fā)維護帶來什么問題?
如果app的更改會影響數(shù)據(jù)庫的操作。必須會觸及并重新編譯使用Animal屬性的類以使app的更改生效。
你會發(fā)現(xiàn)這樣的系統(tǒng)缺乏彈性,像多米諾骨牌一樣,更改一處會影響其他所有的地方。
讓我們遵循SRP原則,我們創(chuàng)建了另外一個用于數(shù)據(jù)操作的類:
class Animal { constructor(name: string){ } getAnimalName() { } } class AnimalDB { getAnimal(a: Animal) { } saveAnimal(a: Animal) { } }
“我們在設計類時,我們應該把相關(guān)的功能放在一起,所以當他們需要發(fā)生改變時,他們會因為同樣的原因而改變。如果是因為不同的原因需要改變它們,我們應該嘗試把它們分開?!?- Steven Fenton
遵循這些原則讓我們的app變得高內(nèi)聚。
開閉原則軟件實體(類,模塊,函數(shù))應該是可以擴展的,而不是修改。
繼續(xù)看我們的Animal類
class Animal { constructor(name: string){ } getAnimalName() { } }
我們想要遍歷動物列表并且設置它們的聲音。
//... const animals: Array= [ new Animal("lion"), new Animal("mouse") ]; function AnimalSound(a: Array ) { for(int i = 0; i <= a.length; i++) { if(a[i].name == "lion") return "roar"; if(a[i].name == "mouse") return "squeak"; } } AnimalSound(animals);
AnimalSound函數(shù)并不符合開閉原則,因為一旦有新動物出現(xiàn),它需要修改代碼。
如果我們加一條蛇進去,
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/98809.html
摘要:并嘗試用為什么你統(tǒng)計的方式是錯的掘金翻譯自工程師的文章。正如你期望的,文中的前端開發(fā)單一職責原則前端掘金單一職責原則又稱單一功能原則,面向?qū)ο笪鍌€基本原則之一。 單頁式應用性能優(yōu)化 - 首屏數(shù)據(jù)漸進式預加載 - 前端 - 掘金前言 針對首頁和部分頁面打開速度慢的問題,我們開始對單頁式應用性能進行優(yōu)化。本文介紹其中一個方案:基于 HTTP Chunk 的首屏數(shù)據(jù)漸進式預加載方案,該方案總...
摘要:應用需要正確并合適響應各種網(wǎng)絡請求用戶操作計時事件和各種延時動作。好了,我們的新流程圖畫出來了提示城市名稱查找不是很復雜,谷歌地圖為此提供了非常簡單的。形象點表示就是,函數(shù)是一等公民。 By Hubert Zub | Oct 3, 2018 原文 當你將關(guān)注點從樣式,美學和網(wǎng)格系統(tǒng)轉(zhuǎn)移到邏輯,框架和編寫JavaScript代碼時。一切都開始了,你會發(fā)現(xiàn)你處于你的web開發(fā)歷程中最激動人...
摘要:編寫的內(nèi)容,就像你目前正在閱讀的文章,組成了超過的網(wǎng)頁。為這個文本內(nèi)容添加樣式將有一個很長的路要走。添加讓我們借這個機會,來提高文本格調(diào)。瞧按照網(wǎng)頁設計的基本原則,我們在短短幾分鐘內(nèi)設計了一個像樣的頁面。 showImg(https://segmentfault.com/img/bVCrlL); 比方說,你想要在自己網(wǎng)站上分享一個產(chǎn)品,或者是一個作品集,又或者僅僅只是一個靈感。在你發(fā)布...
摘要:編寫的內(nèi)容,就像你目前正在閱讀的文章,組成了超過的網(wǎng)頁。為這個文本內(nèi)容添加樣式將有一個很長的路要走。添加讓我們借這個機會,來提高文本格調(diào)。瞧按照網(wǎng)頁設計的基本原則,我們在短短幾分鐘內(nèi)設計了一個像樣的頁面。 showImg(https://segmentfault.com/img/bVCrlL); 比方說,你想要在自己網(wǎng)站上分享一個產(chǎn)品,或者是一個作品集,又或者僅僅只是一個靈感。在你發(fā)布...
摘要:前端中的計算機領(lǐng)域的通常認為起源于。并對其主要內(nèi)容作了自己的解讀。搬到另一個地區(qū)會導致名氣降低。年度報告,年最受歡迎的編程語言年上最流行的種編程語言及前十最火熱的項目排行榜,分別由及登頂。技術(shù)周刊由小組出品,匯聚一周好文章,周刊原文。 showImg(https://segmentfault.com/img/bVWHC4?w=1000&h=710); 本期推薦 反擊爬蟲,前端工程師的腦...
閱讀 1514·2021-10-11 10:59
閱讀 1887·2021-09-09 11:36
閱讀 1402·2019-08-30 15:55
閱讀 1332·2019-08-29 11:20
閱讀 3067·2019-08-26 13:39
閱讀 1472·2019-08-26 13:37
閱讀 1966·2019-08-26 12:11
閱讀 1328·2019-08-23 14:28