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

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

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

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

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

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

解釋說明:

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

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

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

錯誤案例1:

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

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

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

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

錯誤案例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ù)庫連接
        SqlConnection GetConnection();
        // 關(guān)閉連接
        void Close();
        // 執(zhí)行添加、更新、刪除操作
        void ExecuteUpdate(string strSQL);
        // 執(zhí)行查詢操作
        DataSet ExecuteQuery(String strSQL);
    }
}

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

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

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

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

相關(guān)文章

  • C#中ListView控件實(shí)現(xiàn)窗體代碼

    C#中ListView控件實(shí)現(xiàn)窗體代碼

    這篇文章主要介紹了C#中ListView控件實(shí)現(xiàn)窗體的核心代碼,非常不錯,具有參考借鑒價值,對c#listview相關(guān)知識感興趣的朋友一起學(xué)習(xí)吧
    2016-08-08
  • C#實(shí)現(xiàn)騎士飛行棋

    C#實(shí)現(xiàn)騎士飛行棋

    這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)騎士飛行棋,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • C#沉淀之委托的深入講解

    C#沉淀之委托的深入講解

    如果要給方法傳遞一個方法參數(shù)時,就可以使用委托。下面這篇文章主要給大家介紹了關(guān)于C#沉淀之委托的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2018-09-09
  • C#11新特性之file關(guān)鍵字的用法教程

    C#11新特性之file關(guān)鍵字的用法教程

    C#11?添加了文件作用域類型功能:一個新的?file?修飾符,可以應(yīng)用于任何類型定義以限制其只能在當(dāng)前文件中使用。這樣,我們可以在一個項(xiàng)目中擁有多個同名的類。本文就來聊聊file關(guān)鍵字的用法,需要的可以參考一下
    2022-12-12
  • C#獲取根目錄實(shí)現(xiàn)方法匯總

    C#獲取根目錄實(shí)現(xiàn)方法匯總

    這篇文章主要介紹了C#獲取根目錄實(shí)現(xiàn)方法匯總,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • C#組件系列 你值得擁有的一款Excel處理神器Spire.XLS

    C#組件系列 你值得擁有的一款Excel處理神器Spire.XLS

    又一款Excel處理神器Spire.XLS,這篇文章主要為大家詳細(xì)介紹了第三方組件Spire.XLS,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • 在C#中使用指針的示例代碼

    在C#中使用指針的示例代碼

    C#向開發(fā)人員隱藏了大部分基本內(nèi)存管理操作,因?yàn)樗褂昧死厥掌骱鸵?但是,有時候我們也需要直接訪問內(nèi)存,例如:進(jìn)行平臺調(diào)用,性能優(yōu)化等等,本文給大家介紹了在C#中使用指針的示例代碼,需要的朋友可以參考下
    2024-10-10
  • C#原型模式之如何通過克隆對象來優(yōu)化創(chuàng)建過程

    C#原型模式之如何通過克隆對象來優(yōu)化創(chuàng)建過程

    原型模式是一種創(chuàng)建型設(shè)計模式,通過克隆現(xiàn)有對象來創(chuàng)建新對象,避免重復(fù)的創(chuàng)建成本和復(fù)雜的初始化過程,它適用于對象創(chuàng)建過程復(fù)雜、需要大量相似對象或避免重復(fù)初始化的場景,本文介紹C#原型模式之如何通過克隆對象來優(yōu)化創(chuàng)建過程,感興趣的朋友一起看看吧
    2025-03-03
  • C#滑動驗(yàn)證碼拼圖驗(yàn)證功能實(shí)現(xiàn)(SlideCaptcha)

    C#滑動驗(yàn)證碼拼圖驗(yàn)證功能實(shí)現(xiàn)(SlideCaptcha)

    目前網(wǎng)站上的驗(yàn)證碼機(jī)制可謂是五花八門,有簡單的數(shù)字驗(yàn)證,有摻雜了字母和文字的混淆驗(yàn)證,還有通過滑塊進(jìn)行的拼圖驗(yàn)證,下面這篇文章主要給大家介紹了關(guān)于C#滑動驗(yàn)證碼拼圖驗(yàn)證功能的實(shí)現(xiàn)方法,需要的朋友可以參考下
    2022-04-04
  • C# 遍歷datatable字段名和value的案例

    C# 遍歷datatable字段名和value的案例

    這篇文章主要介紹了C# 遍歷datatable字段名和value的案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01

最新評論

鄄城县| 鞍山市| 常熟市| 青州市| 法库县| 来凤县| 姜堰市| 施甸县| 漾濞| 建湖县| 广饶县| 黔东| 长乐市| 水富县| 横山县| 财经| 明光市| 漳平市| 炉霍县| 凤山县| 龙井市| 德惠市| 甘肃省| 锡林郭勒盟| 高淳县| 溧水县| 元江| 敦化市| 阳信县| 丹江口市| 永吉县| 台北县| 华安县| 扬州市| 屯门区| 定襄县| 思南县| 广德县| 望奎县| 志丹县| 岳普湖县|