亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C#面向?qū)ο笤O(shè)計(jì)原則之單一職責(zé)原則

 更新時(shí)間:2022年03月07日 10:58:40   作者:.NET開(kāi)發(fā)菜鳥(niǎo)  
這篇文章介紹了C#面向?qū)ο笤O(shè)計(jì)原則之單一職責(zé)原則,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

單一職責(zé)原則(SRP)

定義:系統(tǒng)中的每一個(gè)類(lèi)都應(yīng)該只有一個(gè)職責(zé)。

好處:高內(nèi)聚、低耦合。

解釋說(shuō)明:

單一職責(zé)也就是說(shuō)我們應(yīng)該讓一個(gè)類(lèi)或一個(gè)對(duì)象只做一件事情,每個(gè)類(lèi)所要關(guān)注的就是自己要完成的職責(zé)是什么,能夠引起這個(gè)類(lèi)變化的原因也應(yīng)該只有一個(gè),這也是后面提到的所有的設(shè)計(jì)模式都會(huì)遵守的一個(gè)原則。

高內(nèi)聚:先按照面向?qū)ο蟮姆庋b特性來(lái)理解,封裝也就是我們說(shuō)的,應(yīng)該把一個(gè)類(lèi)或?qū)ο笏邢嚓P(guān)的屬性、方法、行為放到一起,放到一個(gè)類(lèi)中,這樣就實(shí)現(xiàn)了一個(gè)封裝的特性。那么內(nèi)聚,就是一個(gè)類(lèi)里面應(yīng)該包含它所有的屬性和行為。封裝就是內(nèi)聚的一種表現(xiàn)方式。高內(nèi)聚是指我們一個(gè)類(lèi)的屬性和行為應(yīng)該和這個(gè)類(lèi)非常緊密,我們才把它放到這個(gè)類(lèi)里面,反之我們就不應(yīng)該把這個(gè)屬性或行為放到這個(gè)類(lèi)里面。

低耦合:內(nèi)聚是指類(lèi)的內(nèi)部,耦合是指類(lèi)與類(lèi)之間或者模塊之間相互的聯(lián)系,這種聯(lián)系、關(guān)系叫耦合,衡量這種耦合的程度,可以用耦合度來(lái)表示,耦合度越高說(shuō)明類(lèi)與類(lèi)之間的聯(lián)系是越緊密的,也就是相互之間的獨(dú)立性比較差,也就是一個(gè)類(lèi)必須依靠另外一個(gè)類(lèi)才有意義,才能存在。耦合度越低,越容易重用,類(lèi)也比較靈活。

錯(cuò)誤案例1:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 單一職責(zé)_SRP_
{
    /// <summary>
    /// 會(huì)計(jì)類(lèi)
    /// </summary>
    public class Accountant
    {
        /// <summary>
        /// 計(jì)算工資
        /// </summary>
        public void CalculateSalary()
        {
           // 計(jì)算工資
        }

        /// <summary>
        /// 存儲(chǔ)數(shù)據(jù)
        /// </summary>
        public void Store()
        {
           // 存儲(chǔ)數(shù)據(jù)
        }
    }
}

在上面的代碼中定義了一個(gè)會(huì)計(jì)類(lèi),類(lèi)里面有兩個(gè)方法:計(jì)算工資和存儲(chǔ)數(shù)據(jù)。一個(gè)類(lèi)里面有兩個(gè)職責(zé),并且引起這個(gè)類(lèi)變化的原因有很多種:一個(gè)是計(jì)算工資的方法的參數(shù)的變化會(huì)影響類(lèi)的變化,存儲(chǔ)數(shù)據(jù)的方法的變化也會(huì)影響類(lèi)的變化,沒(méi)有很好的實(shí)現(xiàn)單一職責(zé)原則,應(yīng)該把計(jì)算工資和存儲(chǔ)數(shù)據(jù)分開(kāi)。

錯(cuò)誤案例2:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
using System.Data;

namespace 單一職責(zé)_SRP_
{
    public interface IDao
    {
        // 獲取數(shù)據(jù)庫(kù)連接
        SqlConnection GetConnection();
        // 關(guān)閉連接
        void Close();
        // 執(zhí)行添加、更新、刪除操作
        void ExecuteUpdate(string strSQL);
        // 執(zhí)行查詢(xún)操作
        DataSet ExecuteQuery(String strSQL);
    }
}

上面的代碼中定義了一個(gè)數(shù)據(jù)訪問(wèn)類(lèi),里面有兩個(gè)方法:數(shù)據(jù)鏈接、執(zhí)行增刪改查的操作。數(shù)據(jù)鏈接一般和配置文件關(guān)聯(lián)比較大。如果配置文件沒(méi)有配置好、或者數(shù)據(jù)庫(kù)服務(wù)沒(méi)有開(kāi)啟,那么數(shù)據(jù)庫(kù)鏈接可能就打不開(kāi)。執(zhí)行增刪改查主要和SQL語(yǔ)句有關(guān)系。最理想的設(shè)計(jì)應(yīng)該是把與數(shù)據(jù)鏈接有關(guān)的操作封裝成一個(gè)類(lèi),把執(zhí)行增刪改查的操作封裝到另外一個(gè)類(lèi)中。

在上面的兩個(gè)錯(cuò)誤案例中,一個(gè)類(lèi)都實(shí)現(xiàn)了兩個(gè)職責(zé),而不是一個(gè)職責(zé),不符合單一職責(zé)的原則。這樣設(shè)計(jì)類(lèi)不是最完美的,建議按照單一職責(zé)的原則細(xì)分成兩個(gè)類(lèi),這樣就能實(shí)現(xiàn)高內(nèi)聚低耦合。

代碼下載鏈接:點(diǎn)此下載

到此這篇關(guān)于C#面向?qū)ο笤O(shè)計(jì)單一職責(zé)原則的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論