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