欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C# 面向?qū)ο蟮幕驹瓌t

 更新時(shí)間:2009年11月20日 17:42:36   作者:  
什么是面向?qū)ο蟮幕驹瓌t?設(shè)計(jì)原則是基本的工具,應(yīng)用這些規(guī)則可以使你的代碼更加靈活、更容易維護(hù),更容易擴(kuò)展。
C#面向?qū)ο蟮幕驹瓌t
一、面向接口編成而不是實(shí)現(xiàn) [Code to an interface rather than to an implementation.]

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

三、SRP: The single responsibility principle 單一職責(zé)
系統(tǒng)中的每一個(gè)對(duì)象都應(yīng)該只有一個(gè)單獨(dú)的職責(zé),而所有對(duì)象所關(guān)注的就是自身職責(zé)的完成。[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 .]
每一個(gè)職責(zé)都是一個(gè)設(shè)計(jì)的變因,需求變化的時(shí)候,需求變化反映為類職責(zé)的變化。當(dāng)你系統(tǒng)里面的對(duì)象都只有一個(gè)變化的原因的時(shí)候,你就已經(jīng)很好的遵循了SRP原則。 如果一個(gè)類承擔(dān)的職責(zé)過多,就等于把這些職責(zé)耦合在了一起。一個(gè)職責(zé)的變化就可能削弱或者抑制這個(gè)類其它職責(zé)的能力。這種設(shè)計(jì)會(huì)導(dǎo)致脆弱的設(shè)計(jì)。當(dāng)變化發(fā)生的時(shí)候,設(shè)計(jì)會(huì)遭到意想不到的破壞。SRP 讓這個(gè)系統(tǒng)更容易管理維護(hù),因?yàn)椴皇撬械膯栴}都攪在一起。
內(nèi)聚[Cohesion[ 其實(shí)是SRP原則的另外一個(gè)名字.你寫了高內(nèi)聚的軟件其實(shí)就是說你很好的應(yīng)用了SRP原則。

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

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

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

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

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

相關(guān)文章

  • C#編程獲取實(shí)體類屬性名和值的方法示例

    C#編程獲取實(shí)體類屬性名和值的方法示例

    這篇文章主要介紹了C#編程獲取實(shí)體類屬性名和值的方法,涉及C#實(shí)體類的定義、實(shí)例化、遍歷等相關(guān)操作技巧,需要的朋友可以參考下
    2017-04-04
  • C#中fixed關(guān)鍵字的作用總結(jié)

    C#中fixed關(guān)鍵字的作用總結(jié)

    以下是對(duì)C#中fixed關(guān)鍵字的作用進(jìn)行了詳細(xì)的總結(jié)介紹,需要的朋友可以過來參考下,希望對(duì)大家有所幫助
    2013-09-09
  • C# winform循環(huán)播放多個(gè)視頻

    C# winform循環(huán)播放多個(gè)視頻

    這篇文章主要為大家詳細(xì)介紹了C# winform循環(huán)播放多個(gè)視頻的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • Unity 如何批量修改FBX模型

    Unity 如何批量修改FBX模型

    這篇文章主要介紹了Unity 批量修改FBX模型的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • c#獲取圖片正確格式的方法

    c#獲取圖片正確格式的方法

    這篇文章主要介紹了c#獲取圖片正確格式的方法,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • c#之事件用法

    c#之事件用法

    這篇文章介紹了c#中事件的用法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • ajaxFileUpload插件,C#返回Json數(shù)據(jù)報(bào)錯(cuò)問題的解決方案

    ajaxFileUpload插件,C#返回Json數(shù)據(jù)報(bào)錯(cuò)問題的解決方案

    這篇文章主要介紹了ajaxFileUpload插件,C#返回Json數(shù)據(jù)報(bào)錯(cuò)的解決方案,需要的朋友可以參考下
    2017-12-12
  • c#擴(kuò)展datatable轉(zhuǎn)json示例

    c#擴(kuò)展datatable轉(zhuǎn)json示例

    這篇文章主要介紹了c#擴(kuò)展datatable轉(zhuǎn)json示例,需要的朋友可以參考下
    2014-05-05
  • C#  ADO.NET 離線查詢的實(shí)現(xiàn)示例

    C# ADO.NET 離線查詢的實(shí)現(xiàn)示例

    這篇文章主要介紹了C# ADO.NET 離線查詢的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • C#在foreach遍歷刪除集合中元素的三種實(shí)現(xiàn)方法

    C#在foreach遍歷刪除集合中元素的三種實(shí)現(xiàn)方法

    這篇文章主要給大家總結(jié)介紹了關(guān)于C#在foreach遍歷刪除集合中元素的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用C#具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12

最新評(píng)論