精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

單一職責到底是什么?十分鐘帶你掌握!

開發
在日常開發工作中,經常會聽到有經驗的技術念叨xxx需要注意單一職責,那么,什么是單一職責?如何做才能保證職責單一?這篇文章幫你分析透。

在日常開發工作中,經常會聽到有經驗的技術念叨xxx需要注意單一職責,那么,什么是單一職責?如何做才能保證職責單一?這篇文章幫你分析透。

什么是單一職責?

關于單一職責,看過很多版本的解釋,這里歸納最常見的三個版本:

  • 版本一:一個類只有一個引起變化的原因
  • 版本二:一個類都應該只負責一項職責
  • 版本三:一個類只能干一件事情

哪個版本的解釋比較合理呢?

單一職責原則,英文是:Single responsibility principle(SRP),是 Robert C. Martin提出的 SOLID原則中的一種,所以,我們先看看 作者對單一職責原則的描述,這里摘取了作者關于單一職責的原文:

The Single Responsibility Principle (SRP) states that
each software module should have one and only one reason to change.

原文翻譯為:單一職責原則指出,任何一個軟件模塊都應該有一個且只有一個修改的理由。

定義看起來很嚴謹,但似乎和現實是相沖突的,因為軟件設計本身就是一門關注長期變化的學問,變化是軟件中最常見不過的問題,在現實環境中,軟件系統為了滿足用戶和所有者的要求,勢必會作出各種修改,而系統的用戶或者所有者就是該設計原則所指的"被修改的原因"。

于是乎,作者又重新把單一職責描述為:

The single responsibility principle states that every module
or class should have responsibility over a single part of 
the functionality provided by the software, and that 
responsibility should be entirely encapsulated by the class.

原文翻譯為:單一職責原則指出,每個模塊或類應該只負責軟件所提供功能的一部分,并且這個職責應該完全被該類封裝。

在這個定義中,每個模塊或者類只負責軟件的一部分功能,那這一部分是多少呢?這部分功能是否可以包含不同類型的行為呢?比如,電商中的訂單和物流都可以叫做電商的一部分功能,但是他們在業務意義上顯然是不同的領域,因此,該定義缺乏了定性。

于是乎,作者再次修改了單一職責的定義:

Each module should only be responsible to one actor.

原文翻譯為:任何一個軟件模塊都應該只對某一類行為者負責

這個定義,只要是能歸結成一類的行為,都可以屬于某個模塊的功能,這樣定義看起來更符合現實業務的語意。

軟件模塊是什么?

在上述單一職責幾個定義中都提到了軟件模塊,那么,軟件模塊到底是什么呢?

軟件模塊(Software Module)是指軟件系統中的一個獨立單元,它包含一組相關的功能和數據,這些模塊是通過封裝數據和功能來實現的,以便實現更高的代碼復用性、可維護性和可擴展性。通常具有以下特點:

  • 獨立性:模塊是相對獨立的代碼單元,可以單獨開發、測試和部署。模塊的獨立性提高了系統的靈活性,使得各個模塊可以獨立演化和更新,而不影響其他模塊。
  • 封裝性:模塊內部的數據和實現細節對外界隱藏,只通過公開的接口與其他模塊進行交互。封裝性提高了代碼的安全性和可維護性。
  • 職責單一:每個模塊通常只負責一組相關的功能,這有助于遵循單一職責原則,使得模塊更加易于理解和維護。
  • 可重用性:模塊設計得當,可以在不同的項目中重復使用,提高了開發效率和代碼質量。
  • 可替換性:模塊通過標準化的接口與外界交互,可以在不影響其他部分的前提下替換或更新某個模塊。

為了更好地說明軟件模塊,這里以一個電商系統為例,它可能包含以下幾個模塊:

(1) 用戶管理模塊:

  • 功能:處理用戶的注冊、登錄、個人信息管理等。
  • 接口:提供用戶注冊、登錄、信息更新等服務。

(2) 訂單管理模塊:

  • 功能:處理訂單的創建、更新、查詢等。
  • 接口:提供訂單創建、訂單狀態更新、訂單查詢等服務。

(3) 支付處理模塊:

  • 功能:處理訂單的支付、退款等。
  • 接口:提供支付請求、支付狀態查詢、退款等服務。

(4) 庫存管理模塊:

  • 功能:處理商品的庫存查詢、更新等。
  • 接口:提供庫存查詢、庫存更新等服務。

單一職責示例

為了更好的說明任何一個軟件模塊都應該只對某一類行為者負責這個定義,下面我們通過2個 Java反例來進行演示。

反例1

假設有一個 Employee員工類并且包含以下 3個方法:

public class Employee { 
  // calculatePay() 實現計算員工薪酬
  public Money calculatePay();
  // save() 將Employee對象管理的數據存儲到企業數據庫中
  public void save();
  // postEvent() 用于促銷活動發布
  public void postEvent();
}

剛看上去,這個類設計得還挺符合實際業務,員工有計算薪酬、保存數據、發布促銷等行為,但是這 3個方法對應三類不同的行為者,計算薪酬屬于財務的行為,保存數據屬于數據管理員的行為,發布促銷屬于銷售的行為。

因此,Employee類將三類行為耦合在一起,違反了單一職責原則。假如一個普通員工不小心調用了calculatePay()方法,把每個員工的薪酬計算成了實際工資的2位,那可想而知這是一個災難性的問題。

如果增加新需求,要求員工能夠導出報表,因此,需要在 Employee類中增加了一個新的方法,代碼如下:

// 導出報表
void exportReport();

接著需求又一個一個增加,Employee類就得一次一次的變動,這會導致什么結果呢?

一方面,Employee類會不斷地膨脹;另一方面,可能業務需求完全不同,卻始終需要在同一個 Employee類上改動,合理嗎?

聯想一下你的日常開發,是否也有這樣的設計?把很多不同的行為都耦合到同一個類中,然后隨著業務的增加,該類急劇膨脹,最后無法維護。

該如何解決這種問題呢?

解決這個問題的方法有很多,特定的行為只能由特定的行為者來操作,因此,需要把 Employee類拆解成 3種行為者(財務、數據管理員、銷售),Employee類拆分之后的代碼如下:

// 財務行為
public class FinanceStaff {
  public Money calculatePay();
}

// 數據管理員行為
public class TechnicalStaff {
    public void save();
}

// 銷售行為
public class OperatorStaff {
    public String postEvent();
}

反例2

假設需要開發一個電商系統,其中有一個 Order訂單類,負責處理訂單的創建、訂單的支付以及訂單的通知,代碼如下:

public class Order {

    public void createOrder() {
        // 訂單創建邏輯
    }

    public void processPayment() {
        // 支付處理邏輯
    }

    public void sendNotification() {
        // 發送通知邏輯
    }
}

在上述代碼中,Order類同時承擔了訂單創建、支付處理和通知發送的職責,違反了單一職責原則,因為一個類有多個引起變化的原因。

為了遵循SRP,我們需要將不同的職責分離到不同的類中,因此可以創建三個類:Order類負責訂單創建,PaymentProcessor類負責支付處理,NotificationService類負責通知發送,每個類都只承擔一個職責,從而遵循了單一職責原則。代碼如下:

public class Order {
    public void createOrder() {
        // 訂單創建邏輯
    }
}

public class PaymentProcessor {
    public void processPayment(Order order) {
        // 支付處理邏輯
    }
}

public class NotificationService {
    public void sendNotification(Order order) {
        // 發送通知邏輯
    }
}

上面2個示例代碼的拆分都遵從了原則:因相同原因而發生變化的事物聚集在一起,因不同原因而改變的事物分開。這就是單一職責的真正體現,也是定義內聚和耦合的一種方式。

總結

從作者 Robert C. Martin對單一職責的 3次定義變更,我們可以看出:

  • 單一職責原則本質上就是要理解分離關注點。
  • 單一職責原則可以應用于不同的層次,小到一個函數,大到一個系統。
  • 軟件設計也不可能一成不變。

回歸到實際的工作中,我們可以把一個系統模塊看作一個單一職責的行為者,比如:訂單系統只關注訂單相關的行為,交易系統只關注交易相關的行為,我們也可以把類作為一個單一職責的行為者,比如:訂單類,把訂單相關的 CRUD聚合在一起,支付類,把支付相關的信息聚合在一起。

因此,任何一個軟件模塊都應該只對某一類行為者負責這個定義才更適合單一職責。

最后,單一職責原則是面向對象設計的重要原則之一,它可以提高代碼的可維護性、可讀性和可擴展性,在日常開發中,遵循 SRP可以有效地降低類之間的耦合度,提高系統的穩定性和靈活性,從而寫出更高質量的代碼。

責任編輯:趙寧寧 來源: 猿java
相關推薦

2024-07-12 09:00:00

2024-12-13 15:29:57

SpringSpringBeanJava

2024-10-25 15:56:20

2022-06-16 07:31:41

Web組件封裝HTML 標簽

2025-01-07 12:00:00

RedisPipelineJava

2022-08-26 09:01:07

CSSFlex 布局

2024-11-07 16:09:53

2024-07-22 11:33:29

2024-08-30 10:51:51

2020-12-17 06:48:21

SQLkafkaMySQL

2019-04-01 14:59:56

負載均衡服務器網絡

2023-09-26 22:12:13

數據倉庫Doris

2023-10-07 00:06:09

SQL數據庫

2020-09-27 14:41:37

C語言編程語言計算機

2020-12-09 16:41:22

LinuxIT開發

2024-06-19 09:58:29

2021-09-07 09:40:20

Spark大數據引擎

2023-04-12 11:18:51

甘特圖前端

2012-07-10 01:22:32

PythonPython教程

2023-11-30 10:21:48

虛擬列表虛擬列表工具庫
點贊
收藏

51CTO技術棧公眾號

精品影片一区二区入口| 黄色三级中文字幕| 亚洲资源在线播放| 一区二区三区四区电影| 亚洲第一页自拍| 欧美视频在线播放一区| 日本高清中文字幕在线| 成人美女在线视频| 国产精选久久久久久| 日韩av在线天堂| 欧美一级淫片| 亚洲精品一区二区三区在线观看 | 国产欧美亚洲精品| 久久久久久激情| 欧美日韩中文一区二区| 欧美成人综合网站| 自拍偷拍一区二区三区四区| 91破解版在线观看| 日韩毛片一二三区| 欧美午夜视频在线| 日本精品一二区| 精品亚洲成a人| 国产成人精品久久亚洲高清不卡| 久久久99精品| 99精品网站| 亚洲天堂av高清| 7788色淫网站小说| 亚洲综合影院| 欧美一区二区三区播放老司机| 粗暴91大变态调教| 免费毛片b在线观看| 亚洲欧美激情一区二区| 亚洲国产精品久久久久婷婷老年| 天堂影院在线| 亚洲黄色录像| 日韩欧美国产小视频| 777视频在线| 日本电影欧美片| 性欧美疯狂xxxxbbbb| 大陆极品少妇内射aaaaaa| av电影在线网| 欧美高清在线一区| 日韩一区不卡| 国产乱视频在线观看| 久久综合狠狠综合| 国产综合欧美在线看| 韩国av在线免费观看| 国产成人a级片| 99在线影院| 亚洲欧美另类一区| 丁香啪啪综合成人亚洲小说| 97免费高清电视剧观看| 精品国精品国产自在久不卡| 国内精品在线播放| 91青草视频久久| av手机免费看| 国产福利一区在线观看| 亚洲一区精品电影| 性一交一乱一透一a级| 成人一区二区三区视频在线观看| 国产二区不卡| 天堂中文资源在线观看| 91一区二区三区在线观看| 免费久久一级欧美特大黄| 青青久草在线| 国产欧美日韩三区| 一区二区冒白浆视频| 国产盗摄在线观看| 尤物在线观看一区| 99在线精品免费视频| 在线黄色的网站| 欧美性猛片xxxx免费看久爱| 伊人网在线综合| 午夜免费欧美电影| 日韩理论片久久| 欧美aaa级片| 欧美国产高潮xxxx1819| 97在线观看视频国产| 亚洲成熟少妇视频在线观看| 另类的小说在线视频另类成人小视频在线 | 国产欧美午夜| 国产精品久久久久久久久免费看| 夜夜狠狠擅视频| 国产99久久久国产精品潘金网站| 国产三区二区一区久久| 成人在线二区| 亚洲精品自拍动漫在线| 国产资源在线视频| 国产成人精选| 亚洲成人网在线| 色哟哟精品观看| 女人色偷偷aa久久天堂| 欧美在线观看日本一区| 亚洲综合五月天婷婷丁香| 高清不卡一二三区| 日韩一区二区三区高清| 丝袜美女在线观看| 91国在线观看| 制服丝袜av在线| 欧美wwwww| 91成人免费观看网站| 国产女人18毛片水18精| 91年精品国产| 黄色特一级视频| 天堂久久午夜av| 亚洲国产美女精品久久久久∴| 右手影院亚洲欧美| 警花av一区二区三区| 亚洲国产毛片完整版| 99久久99久久精品免费看小说.| 极品中文字幕一区| 91九色视频在线| 成人免费在线观看| 欧美日韩国产一中文字不卡| 午夜影院免费版| 日本在线电影一区二区三区| 国内精品视频久久| 99草在线视频| 国产精品色在线| 国产无套内射久久久国产| 国产乱码精品一区二三赶尸艳谈| 欧美日韩中文字幕一区| 在线免费观看a级片| 真实国产乱子伦精品一区二区三区| 青青久久av北条麻妃海外网| 丰满人妻一区二区三区四区53| 国产精品日产欧美久久久久| 可以免费观看av毛片| 99a精品视频在线观看| 日韩在线观看免费av| 欧美日韩 一区二区三区| 91香蕉视频污在线| 97视频在线免费| 网站一区二区| 欧美夫妻性生活视频| 国产aⅴ爽av久久久久成人| 国产精品视频免费| 最近中文字幕一区二区| 狠狠操综合网| 国产97在线视频| 国产在线视频资源| 日本韩国一区二区三区视频| www.自拍偷拍| 久久国产精品久久久久久电车| 精品亚洲一区二区三区四区五区高| 丰满的护士2在线观看高清| 日韩美女视频在线| 九九视频免费看| 成人黄色大片在线观看| 九色自拍视频在线观看| 久久99精品国产自在现线| 久久久久国产视频| 手机av在线免费观看| 精品国产31久久久久久| 国产男女猛烈无遮挡a片漫画| 国产欧美午夜| 日韩理论片在线观看| 日韩精品免费观看视频| 在线观看欧美视频| 国产又粗又大又黄| 一区二区在线看| av免费观看不卡| 午夜亚洲一区| 视频一区国产精品| 亚洲精品大全| 久久久久九九九九| 能在线看的av| 欧美精品在线一区二区三区| 免费在线观看一级片| 成人av网站免费观看| 欧美日韩成人免费视频| 精品理论电影在线| 亚洲综合最新在线| 蜜桃视频在线观看播放| 中文字幕v亚洲ⅴv天堂| 国产色视频在线| 午夜电影网一区| 林心如三级全黄裸体| 国产精品66部| 欧美女人性生活视频| 欧美电影《轻佻寡妇》| 92看片淫黄大片看国产片| 大菠萝精品导航| 在线成人激情视频| 亚洲AV无码精品国产| 日韩欧美aⅴ综合网站发布| 精品手机在线视频| 成人午夜在线播放| 亚洲男人天堂色| 国产一区日韩欧美| 日本黑人久久| 国产美女撒尿一区二区| 国产精品久久久久久影视| 成人女同在线观看| 一区二区三区视频观看| 人人妻人人澡人人爽久久av| 欧洲一区二区av| 久久精品这里有| 中文幕一区二区三区久久蜜桃| 911亚洲精选| 美女免费视频一区二区| 欧美 国产 综合| 午夜国产精品视频| 日韩hmxxxx| 久久精品色播| 亚洲最大av网站| 成人午夜sm精品久久久久久久| 国a精品视频大全| av在线免费网站| 中文字幕久久精品| 日本不卡视频一区二区| 欧美大片一区二区| 一级日韩一级欧美| 色婷婷激情综合| 精品无码久久久久久久| 亚洲欧美综合网| 在线观看免费黄色网址| 99久久精品久久久久久清纯| 男女污污视频网站| 理论片日本一区| 国产三级日本三级在线播放| 先锋影音久久久| 国产精品网站免费| 亚洲久久一区| 日本大片免费看| 欧美精品aa| 大桥未久一区二区三区| 日本欧美肥老太交大片| 欧美一区二区三区精美影视 | 欧美精品一区在线观看| 国产伦精品一区二区三区视频痴汉 | 成人国产精品久久| 国产精品欧美日韩| 精品免费av一区二区三区| 欧美性在线视频| 欧美gv在线| 欧美最近摘花xxxx摘花| 英国三级经典在线观看| 538国产精品一区二区免费视频| 黄污视频在线观看| 欧美激情一区二区三区成人 | 精品福利视频导航| 国产成人亚洲精品自产在线| 亚洲成a人v欧美综合天堂| 久久综合激情网| 亚洲一二三区不卡| 久久不卡免费视频| 国产亚洲精品免费| 性久久久久久久久久| 99久久99久久精品免费看蜜桃 | 国产日韩欧美一区二区三区乱码 | 欧美在线xxx| 一个人看的www视频在线免费观看 一个人www视频在线免费观看 | 中文字幕黄色网址| 国产精品家庭影院| 麻豆明星ai换脸视频| 怡红院av一区二区三区| 国产精品99精品| 色综合久久中文综合久久97| 青青青国产在线| 欧美性猛交xxxx乱大交退制版| 岳乳丰满一区二区三区| 91精品国产色综合久久| 精品国产999久久久免费| 精品免费日韩av| 天天影院图片亚洲| 伊人久久久久久久久久久| 日本中文字幕视频在线| 欧美日韩成人免费| 蜜桃麻豆影像在线观看| 国产精品丝袜高跟| 日韩三级精品| 欧美精品人人做人人爱视频| 日韩欧美一区二区三区在线视频| 男女激烈动态图| 久久av一区| 韩国一区二区在线播放| 99视频精品在线| 人与动物性xxxx| 午夜亚洲福利老司机| 亚洲免费视频二区| 欧美成人aa大片| 黄色av网站在线免费观看| 久久中文字幕一区| 午夜影院在线播放| 国产一区二区丝袜高跟鞋图片| 99re91这里只有精品| 欧美资源一区| 欧美三级第一页| 天天爽天天爽夜夜爽| 国产成人高清在线| 国产综合精品久久久久成人av| 一区二区三区丝袜| 中文字幕 自拍偷拍| 亚洲韩国青草视频| 哥也色在线视频| 国产精品福利在线| av毛片精品| 伊人av成人| 性色一区二区三区| 制服下的诱惑暮生| 国产午夜精品久久久久久久 | 91影视免费在线观看| 亚洲传媒在线| 精品成在人线av无码免费看| 久久国产人妖系列| 手机免费看av| 亚洲午夜一二三区视频| 亚洲综合视频在线播放| 亚洲日本中文字幕| 电影在线观看一区| 97se国产在线视频| 99久久精品费精品国产| 国产三级三级三级看三级| www.欧美色图| 国产一级片播放| 91精品免费在线观看| h网站在线免费观看| 欧美中文在线字幕| 久久97精品| 国产96在线 | 亚洲| 国产精品一二三| 中国毛片直接看| 欧美猛男gaygay网站| 国产私拍精品| 日韩av123| 怕怕欧美视频免费大全| 男人揉女人奶房视频60分 | 6080午夜不卡| jizz在线观看| 国产精品第一视频| 国产午夜一区| 老熟妇仑乱视频一区二区| 久久精品一区二区三区不卡| 天堂中文字幕在线观看| 日韩成人激情在线| 国产福利电影在线播放| 精品国产综合| 亚洲欧美高清| 欧美做受xxxxxⅹ性视频| 色婷婷综合久久| 伦理片一区二区三区| 国产精品96久久久久久又黄又硬| 天天躁日日躁狠狠躁欧美巨大小说| 1024av视频| 久久色成人在线| 亚洲精品久久久久久久蜜桃| 亚洲人成啪啪网站| 日日夜夜天天综合| 日韩中文字幕av在线| 蜜臀av性久久久久av蜜臀妖精| 91在线无精精品白丝| 欧美日韩国产电影| 国产原厂视频在线观看| 99精品国产高清在线观看| 91久久亚洲| mm131美女视频| 欧美午夜片在线看| 国产婷婷视频在线| 99精品国产高清一区二区| 国产欧美二区| 亚洲综合欧美综合| 欧美一区二区三区人| 在线观看中文字幕的网站| 国产另类自拍| 久色成人在线| 潘金莲一级黄色片| 精品日韩99亚洲| 在线一区av| 黄色一级片网址| 99久久综合精品| 国产又粗又猛又爽又| 久久精品国产亚洲精品2020| 这里视频有精品| 亚洲人成无码www久久久| 国产精品久久久久影视| 亚洲精品国产av| 日韩美女中文字幕| 欧美在线不卡| 18禁裸乳无遮挡啪啪无码免费| 欧美亚洲国产一区在线观看网站 | 好吊色一区二区三区| 国产成人精品综合| 欧美在线不卡| 久久午夜福利电影| 日韩欧美一区二区不卡| 国产精品av一区二区三区| 美女在线免费视频| 91蜜桃网址入口| 99热这里只有精品1| 欧洲亚洲免费在线| 欧美视频二区| www中文在线| 亚洲欧美www| 97久久综合区小说区图片区| 超碰97人人射妻| 悠悠色在线精品| 91亚洲欧美| 你懂的视频在线一区二区| 国产成人综合网|