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