面向對象設計的六大原則(SOLID原則)-——單一職責原則

来源:https://www.cnblogs.com/forges/p/18067523
-Advertisement-
Play Games

單一職責原則(Single Responsibility Principle, SRP)是面向對象編程和設計的五大SOLID原則之一。它強調一個類、方法或模塊應該只有一個職責,即只做一件事情。如果一個類承擔的職責過多,那麼它的可維護性、可讀性和可擴展性都會受到影響。當需要修改類的某個職責時,可能會影 ...


單一職責原則(Single Responsibility Principle, SRP)是面向對象編程和設計的五大SOLID原則之一。它強調一個類、方法或模塊應該只有一個職責,即只做一件事情。如果一個類承擔的職責過多,那麼它的可維護性、可讀性和可擴展性都會受到影響。當需要修改類的某個職責時,可能會影響到其他職責的實現,導致不必要的代碼改動和潛在的bug。

詳細解釋

一個類應該只有一個引起變化的原因。這意味著,如果你能夠想到多於一個的動機去改變一個類,那麼這個類就具有多於一個的職責,就應該考慮類的職責分離。

應用場景及代碼示例(C#)

場景1:日誌記錄類

描述:一個類只負責日誌的記錄,包括日誌的寫入、格式化等。

代碼示例

public interface ILogger  
{  
    void Log(string message);  
}  
  
public class ConsoleLogger : ILogger  
{  
    public void Log(string message)  
    {  
        Console.WriteLine($"Logged: {message}");  
    }  
}  
  
public class FileLogger : ILogger  
{  
    private readonly string _filePath;  
  
    public FileLogger(string filePath)  
    {  
        _filePath = filePath;  
    }  
  
    public void Log(string message)  
    {  
        File.AppendAllText(_filePath, $"Logged: {message}{Environment.NewLine}");  
    }  
}

在這個例子中,ConsoleLoggerFileLogger 都實現了 ILogger 介面,但它們各自只負責一種日誌記錄方式。

場景2:用戶認證類

描述:一個類只負責用戶的登錄、註冊和身份驗證等功能。

代碼示例

public interface IAuthenticationService  
{  
    bool RegisterUser(User user);  
    bool LoginUser(string username, string password);  
    bool IsUserAuthenticated(string token);  
}  
  
public class AuthenticationService : IAuthenticationService  
{  
    // 假設這裡有一些用戶存儲和驗證邏輯...  
    public bool RegisterUser(User user)  
    {  
        // 註冊用戶邏輯...  
        return true; // 示例返回值  
    }  
  
    public bool LoginUser(string username, string password)  
    {  
        // 登錄用戶邏輯...  
        return true; // 示例返回值  
    }  
  
    public bool IsUserAuthenticated(string token)  
    {  
        // 驗證用戶邏輯...  
        return true; // 示例返回值  
    }  
}

在這個例子中,AuthenticationService 類實現了 IAuthenticationService 介面,並且只負責用戶認證相關的操作。

場景3:訂單處理類

描述:一個類只負責訂單的創建、修改和取消等功能。

代碼示例

public class Order  
{  
    // 訂單屬性...  
}  
  
public interface IOrderService  
{  
    Order CreateOrder(Order order);  
    Order UpdateOrder(Order order);  
    void CancelOrder(Order order);  
}  
  
public class OrderService : IOrderService  
{  
    public Order CreateOrder(Order order)  
    {  
        // 創建訂單邏輯...  
        return order; // 示例返回值  
    }  
  
    public Order UpdateOrder(Order order)  
    {  
        // 更新訂單邏輯...  
        return order; // 示例返回值  
    }  
  
    public void CancelOrder(Order order)  
    {  
        // 取消訂單邏輯...  
    }  
}

在這個例子中,OrderService 類實現了 IOrderService 介面,並且只負責訂單處理相關的操作。它不包含與訂單無關的邏輯,比如庫存管理或用戶認證。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • F-String(格式化字元串字面值)是在Python 3.6中引入的,它是一種非常強大且靈活的字元串格式化方法。 它允許你在字元串中嵌入表達式,這些表達式在運行時會被求值並轉換為字元串,這種特性使得F-String在編寫Python代碼時能夠更簡潔、更直觀地處理字元串。 本文總結了5個實用的F-S ...
  • 概述:在WPF中,通過使用不同的元素如Ellipse、Line、Rectangle等,可以輕鬆繪製各種圖形,包括圓、線條、橢圓、矩形、多邊形等。同時,通過TextBlock展示文字,Image展示圖片,以及Path創建路徑和曲線,使得圖形的繪製變得靈活多樣。通過簡單的XAML代碼,開發者可以快速構建 ...
  • 程式能運行,就是告訴你RZ10012,然後各種提示沒有了。 清理解決方案、電腦重啟了都沒有用,後來搜索到github,解決了,記一下: 關閉vs 刪除文件夾 .vs,bin,object 打開vs,重新生成解決方案 也是醉了。 文字少的博文不允許投稿到該網站分類? 知道什麼叫短小精悍嗎?知道什麼叫短 ...
  • 11.1.0-beta1 Avalonia 是 dotnet 的跨平臺 UI 框架,提供靈活的樣式系統,支持 Windows、macOS、Linux、iOS、Android 和 WebAssembly 等多種平臺。 Avalonia 已經成熟並已做好生產準備,已被 Schneider Electri ...
  • System.Diagnostics.DiagnosticSource 可以豐富地記錄程式中地日誌,包括不可序列化的類型(例如 HttpResponseMessage 或 HttpContext)。 System.Diagnostics.DiagnosticSource 通過訂閱發佈模式運行,我們可 ...
  • 開源項目地址:https://gitee.com/lowcodexaf/rules-engine-editor 前言 本項目是基於XAFBlazor的規則引擎編輯器,規則引擎採用的是微軟開源的RulesEngine RulesEngine項目地址:https://github.com/microso ...
  • 開閉原則(Open-Closed Principle, OCP)是面向對象設計的五大SOLID原則之一。這個原則主張“軟體實體(類、模塊、函數等)應該對擴展開放,對修改關閉”。也就是說,軟體的設計應該允許在不修改原有代碼的情況下增加新的功能。這樣的設計有助於降低代碼的複雜性和維護成本,同時提高系統的 ...
  • 上傳附件判斷word、excel、txt等文檔中是否含有敏感詞如身份證號,手機號等,其它檢測如PDF,圖片(OCR)等可以自行擴展。 互聯網項目中,展示的數據中不能包含個人信息等敏感信息。判斷word中是否包含手機號,word正文中是否包含身份證號等敏感信息,通過正則表達式判斷匹配手機號,身份證號, ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...