最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C# 面向對象的基本原則

 更新時間:2009年11月20日 17:42:36   作者:  
什么是面向對象的基本原則?設計原則是基本的工具,應用這些規(guī)則可以使你的代碼更加靈活、更容易維護,更容易擴展。
C#面向對象的基本原則
一、面向接口編成而不是實現(xiàn) [Code to an interface rather than to an implementation.]

二、優(yōu)先使用組合而非繼承 [Favor Composition Over Inheritance.]

三、SRP: The single responsibility principle 單一職責
系統(tǒng)中的每一個對象都應該只有一個單獨的職責,而所有對象所關注的就是自身職責的完成。[Every object in your system should have a single responsibility ,and all the object s services should be focused on carrying out that single responsibility .]
每一個職責都是一個設計的變因,需求變化的時候,需求變化反映為類職責的變化。當你系統(tǒng)里面的對象都只有一個變化的原因的時候,你就已經(jīng)很好的遵循了SRP原則。 如果一個類承擔的職責過多,就等于把這些職責耦合在了一起。一個職責的變化就可能削弱或者抑制這個類其它職責的能力。這種設計會導致脆弱的設計。當變化發(fā)生的時候,設計會遭到意想不到的破壞。SRP 讓這個系統(tǒng)更容易管理維護,因為不是所有的問題都攪在一起。
內聚[Cohesion[ 其實是SRP原則的另外一個名字.你寫了高內聚的軟件其實就是說你很好的應用了SRP原則。

四、DRY : Don't repeat yourself Principle 避免代碼重復原則
通過抽取公共部分放置在一個地方避免代碼重復.[Avoid duplicate code by abstracting out things that are common and placing those thing in a single location .]
DRY 很簡單,但卻是確保我們代碼容易維護和復用的關鍵。你盡力避免重復代碼實際上是在確保每一個需求和功能在你的系統(tǒng)中只實現(xiàn)一次,否則就存在浪費!系統(tǒng)用例不存在交集,所以我們的代碼更不應該重復,從這個角度看DRY可就不只是在說代碼了。
DRY 關注的是系統(tǒng)內的信息和行為都放在一個單一的,明顯的位置。就像你可以猜到正則表達式在.net中的位置一樣,因為合理所以可以猜到。
DRY 原則:如何對系統(tǒng)職能進行良好的分割!職責清晰的界限一定程度上保證了代碼的單一性。

五、OCP : Open-Close Principle 開放閉合原則
類應該對修改關閉,對擴展打開;[Classes should be open for extension ,and closed for modification .]
OCP 關注的是靈活性,改動是通過增加代碼進行的,而不是改動現(xiàn)有的代碼;
OCP的應用限定在可能會發(fā)生的變化上,通過創(chuàng)建抽象來隔離以后可能發(fā)生的同類變化
OCP原則傳遞出來這樣一個思想:一旦你寫出來了可以工作的代碼,就要努力保證這段代碼一直可以工作。這可以說是一個底線。稍微提高一點要求,一旦我們的代碼質量到了一個水平,我們要盡最大努力保證代碼質量不回退。這樣的要求使我們面對一個問題的時候不會使用湊活的方法來解決,或者說是放任自流的方式來解決一個問題;比如代碼添加了無數(shù)對特定數(shù)據(jù)的處理,特化的代碼越來越多,代碼意圖開始含混不清,開始退化。
OCP 背后的機制:封裝和抽象;封閉是建立在抽象基礎上的,使用抽象獲得顯示的封閉;繼承是OCP最簡單的例子。除了子類化和方法重載我們還有一些更優(yōu)雅的方法來實現(xiàn)比如組合; 怎樣在不改變源代碼(關閉修改)的情況下更改它的行為呢?答案就是抽象,OCP背后的機制就是抽象和多態(tài).沒有一個可以適應所有情況的貼切的模型!一定會有變化,不可能完全封閉.對程序中的每一個部分都肆意的抽象不是一個好主意,正確的做法是開發(fā)人員僅僅對頻繁變化的部分做出抽象。拒絕不成熟的抽象和抽象本身一樣重要。 OCP是OOD很多說法的核心,如果這個原則有效應用,我們就可以獲更強的可維護性 可重用 靈活性 健壯性 LSP是OCP成為可能的主要原則之一

六、LSP: The Liskov substitution principle 里氏替換原則
子類必須能夠替換基類。[Subtypes must be substitutable for their base types.]
LSP關注的是怎樣良好的使用繼承. 必須要清楚是使用一個Method還是要擴展它,但是絕對不是改變它。
LSP清晰的指出,OOD的IS-A關系是就行為方式而言,行為方式是可以進行合理假設的,是客戶程序所依賴的。
LSP讓我們得出一個重要的結論:一個模型如果孤立的看,并不具有真正意義的有效性。模型的有效性只能通過它的客戶程序來表現(xiàn)。必須根據(jù)設計的使用者做出的 合理假設來審視它。而假設是難以預測的,直到設計臭味出現(xiàn)的時候才處理它們。
對于LSP的違反也潛在的違反了OCP 。

七、DIP:依賴倒置原則
高層模塊不應該依賴于底層模塊 二者都應該依賴于抽象,抽象不應該依賴于細節(jié) 細節(jié)應該依賴于抽象。
什么是高層模塊?高層模塊包含了應用程序中重要的策略選擇和業(yè)務模型。這些高層模塊使其所在的應用程序區(qū)別于其它。 如果高層模塊依賴于底層模塊,那么在不同的上下文中重用高層模塊就會變得十分困難。然而,如果高層模塊獨立于底層模塊,那么高層模塊就可以非常容易的被重用。該原則就是框架設計的核心原則。這里的倒置不僅僅是依賴關系的倒置也是接口所有權的倒置。應用了DIP我們會發(fā)現(xiàn)往往是客戶擁有抽象的接口,而服務者從這些抽象接口派生。這就是著名的Hollywood原則:"Don't call us we'll call you."底層模塊實現(xiàn)了在高層模塊聲明并被高層模塊調用的接口。通過倒置我們創(chuàng)建了更靈活 更持久更容易改變的結構。
DIP的簡單的啟發(fā)規(guī)則:依賴于抽象;這是一個簡單的陳述,該規(guī)則建議不應該依賴于具體的類,也就是說程序匯總所有的依賴都應該種植于抽象類或者接口。如果一個類很穩(wěn)定,那么依賴于它不會造成傷害。然而我們自己的具體類大多是不穩(wěn)定的,通過把他們隱藏在抽象接口后面可以隔離不穩(wěn)定性。依賴倒置可以應用于任何存在一個類向另一個類發(fā)送消息的地方,依賴倒置原則是實現(xiàn)許多面向對象技術多宣稱的好處的基本底層機制,是面向對象的標志所在。

八、ISP:接口隔離原則
不應該強迫客戶程序依賴它們不需要的使用的方法。
接口不是高內聚的,一個接口可以分成N組方法,那么這個接口就需要使用ISP處理一下。
接口的劃分是由使用它的客戶程序決定的,客戶程序是分離的接口也應該是分離的。
一個接口中包含太多行為時候,導致它們的客戶程序之間產(chǎn)生不正常的依賴關系,我們要做的就是分離接口,實現(xiàn)解耦。
應用了ISP之后,客戶程序看到的是多個內聚的接口。

相關文章

  • 如何搭建新的WPF項目框架

    如何搭建新的WPF項目框架

    這篇文章主要介紹了如何搭建新的WPF項目框架,在項目開發(fā)中比較常見的開發(fā)模式就是MVVM模式,使用MVVM框架開發(fā)好處:1、框架較輕,2、學習成本低、3、適用大多數(shù)中小型項目,4、相對于微軟的prism框架更容易上手,需要的朋友可以參考下
    2015-07-07
  • 詳解Unity使用ParticleSystem粒子系統(tǒng)模擬藥水在血管中流動(粒子碰撞)

    詳解Unity使用ParticleSystem粒子系統(tǒng)模擬藥水在血管中流動(粒子碰撞)

    這篇文章主要介紹了Unity使用ParticleSystem粒子系統(tǒng)模擬藥水在血管中流動(粒子碰撞),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-05-05
  • C#創(chuàng)建SQLite控制臺應用程序詳解

    C#創(chuàng)建SQLite控制臺應用程序詳解

    這篇文章主要為大家詳細介紹了C#創(chuàng)建SQLite控制臺應用程序,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • c# wpf如何使用Blend工具繪制Control樣式

    c# wpf如何使用Blend工具繪制Control樣式

    這篇文章主要介紹了c# wpf如何使用Blend工具繪制Control樣式,幫助大家更好的理解和學習使用c#,感興趣的朋友可以了解下
    2021-03-03
  • C#定時任務框架Quartz.NET介紹與用法

    C#定時任務框架Quartz.NET介紹與用法

    這篇文章介紹了C#定時任務框架Quartz.NET的用法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02
  • Unity 從Resources中動態(tài)加載Sprite圖片的操作

    Unity 從Resources中動態(tài)加載Sprite圖片的操作

    這篇文章主要介紹了Unity 從Resources中動態(tài)加載Sprite圖片的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • LINQ排序操作符用法

    LINQ排序操作符用法

    這篇文章介紹了LINQ排序操作符的用法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02
  • C#自定義事件及用法實例

    C#自定義事件及用法實例

    這篇文章主要介紹了C#自定義事件及用法,實例分析了C#中自定義事件的定義與使用技巧,需要的朋友可以參考下
    2015-05-05
  • C# Mqtt 斷線重連的實現(xiàn)代碼

    C# Mqtt 斷線重連的實現(xiàn)代碼

    這篇文章主要介紹了C# Mqtt 斷線重連,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09
  • c#創(chuàng)建浮動工具欄功能示例

    c#創(chuàng)建浮動工具欄功能示例

    這篇文章主要介紹了c#創(chuàng)建浮動工具欄功能示例,大家參考使用吧
    2013-12-12

最新評論

景洪市| 绥宁县| 铜梁县| 常山县| 南宫市| 句容市| 焦作市| 西吉县| 刚察县| 吉木萨尔县| 凤冈县| 高雄县| 个旧市| 廉江市| 铜陵市| 九江县| 塘沽区| 桐梓县| 连云港市| 南康市| 长岛县| 五寨县| 洛隆县| 色达县| 汤阴县| 陇西县| 华宁县| 洛阳市| 黄大仙区| 察隅县| 嘉祥县| 梅河口市| 理塘县| 沽源县| 常宁市| 龙胜| 偃师市| 建水县| 彰化县| 阿荣旗| 建湖县|