精品欧美一区二区三区在线观看 _久久久久国色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无码麻豆| 日韩激情视频一区二区| 久久婷婷五月综合| 户外露出一区二区三区| 欧美国产综合色视频| 午夜精品久久久久久99热软件| 国产人成视频在线观看| 51精品视频| 激情都市一区二区| 国产亚洲一区精品| 9l视频白拍9色9l视频| 青草久久伊人| 另类欧美日韩国产在线| 精品少妇一区二区30p| 国产又黄又粗又猛又爽的视频 | 一区二区三区毛片免费| 色综合天天做天天爱| 日韩影片在线播放| 日本一本在线观看| 九九热精品视频在线观看| 天天操天天干天天综合网| 日本在线观看一区二区三区| 特级西西444www大精品视频免费看| 日日夜夜精品视频| 色诱视频网站一区| 蜜桃传媒视频麻豆第一区免费观看| 国产精品欧美综合| 在线电影一区| 亚洲成人精品av| 黑森林精品导航| 在线观看h片| 成人看片黄a免费看在线| 欧美成人亚洲成人| 国产伦精品一区二区三区88av| av免费看在线| 欧美国产一区视频在线观看| 国产精品福利在线| 久久久久久久福利| 日韩mv欧美mv国产网站| 欧美日韩一区在线观看| 国产自产在线视频| fc2ppv国产精品久久| 国产人伦精品一区二区| 国产一区免费在线观看| 激情五月色婷婷| 女人丝袜激情亚洲| 5566中文字幕一区二区电影| 日韩精品―中文字幕| 青青草原av在线| 亚洲影院理伦片| 日韩精品资源| 亚洲AV无码一区二区三区少妇 | 一级黄色片国产| 俺来也官网欧美久久精品| 亚洲精品福利视频网站| 久久国产精品久久精品国产| 日韩在线观看视频网站| 99久免费精品视频在线观看| 国产精品丝袜久久久久久高清| 制服.丝袜.亚洲.中文.综合懂色| av丝袜在线| 亚洲免费观看高清完整版在线观看| 成人av网站观看| 国产v片在线观看| 国产乱对白刺激视频不卡| 亚洲一区二区三区乱码aⅴ蜜桃女 亚洲一区二区三区乱码aⅴ | 97超碰在线视| 黄色在线视频观看网站| 丁香桃色午夜亚洲一区二区三区| 国产精品久久精品视| 少妇精品视频一区二区| 久久综合成人精品亚洲另类欧美| 麻豆亚洲一区| 亚洲国产视频一区二区三区| 成人免费高清视频在线观看| 91精品国产综合久久香蕉922 | 麻豆久久一区二区| 91高清视频在线免费观看| 久久中文免费视频| 日韩综合一区| 欧美高清视频在线播放| 日韩xxxxxxxxx| 日韩二区三区四区| 日本午夜在线亚洲.国产| 中文人妻熟女乱又乱精品| 日韩视频一区二区三区在线播放免费观看| 日韩有码在线播放| 久久免费黄色网址| 中国精品18videos性欧美| 欧美激情视频一区二区三区不卡| 午夜精品久久久久久久久久久久久蜜桃| 免费中文字幕日韩欧美| 8090成年在线看片午夜| 天堂av免费在线观看| 国产精品自产自拍| 欧美日本韩国一区二区三区| 日本天堂在线观看| 精品二区三区线观看| 激情 小说 亚洲 图片: 伦| 蜜臀国产一区| 日韩欧美国产中文字幕| 日本免费黄视频| 九九精品调教| 欧美影院午夜播放| 在线观看成人动漫| 另类ts人妖一区二区三区| 亚洲精品一区二区精华| www.4hu95.com四虎| 成人在线视频免费观看| 日韩在线视频中文字幕| 日韩激情在线播放| 国产精品一页| 92国产精品视频| 欧美成人免费| 国产欧美精品一区aⅴ影院 | 欧美不卡视频一区| 亚洲图片第一页| 中文欧美日韩| 日本高清不卡的在线| 色av性av丰满av| 国产成人av网站| 韩国成人一区| av免费看在线| 欧美日韩精品在线观看| 人妻激情偷乱视频一区二区三区| 136导航精品福利| 亚洲精品福利视频| 丁香花五月婷婷| 99九九热只有国产精品| 日本一区二区在线免费播放| 欧美自拍第一页| 夜夜精品视频一区二区| 99热成人精品热久久66| 国产日韩三级| 久久久亚洲成人| 波多野结衣激情视频| 不卡在线观看av| 亚洲欧洲日韩精品| 免费成人美女女| 91麻豆精品国产91久久久更新时间 | 无码人妻一区二区三区免费| 日韩电影网1区2区| 欧美日本亚洲| 欧美最新精品| 国产亚洲精品久久久| 四虎成人永久免费视频| 99r国产精品| 无码人妻丰满熟妇区96| 国产精品天天看天天狠| 欧美华人在线视频| 日本免费一区视频| 国产精品你懂的在线欣赏| 天天视频天天爽| 国内精品免费| 5252色成人免费视频| 日本啊v在线| 色又黄又爽网站www久久| 亚洲欧洲久久久| 麻豆中文一区二区| 蜜桃传媒视频第一区入口在线看| xxxxx性欧美特大| 亚洲日韩欧美视频| 中文字幕+乱码+中文乱码www| 国产精品欧美久久久久一区二区| 午夜免费福利小电影| 日本国产精品| 国产精品成人免费视频| 午夜成人免费影院| 色综合欧美在线视频区| 国产精品无码无卡无需播放器| 在线观看亚洲| 欧洲国产精品| 久草免费在线视频| 国产一区二区日韩| av在线亚洲天堂| 五月婷婷色综合| www.99热| 国产精品1区二区.| 99999精品视频| 欧美电影一二区| 国产精品久久久对白| 三级中文字幕在线观看| 在线电影av不卡网址| av网站在线免费看| 亚洲欧美激情插 | 国产亚洲欧洲一区高清在线观看| 天天爽人人爽夜夜爽| 欧美日一区二区在线观看| 蜜桃久久影院| 成人影院网站| 亚洲欧美第一页| 午夜精品一区二| 一区二区三区中文字幕精品精品| www.污网站| 中文亚洲字幕| 欧美精品一区二区三区四区五区| 英国三级经典在线观看| 色偷偷av一区二区三区乱| 欧美77777| 欧美日韩久久久| 艳妇荡乳欲伦69影片| 激情图片小说一区| 久久国产亚洲精品无码| 九九亚洲视频| 国产精品美女av| 日本视频不卡| 亚洲人成电影在线观看天堂色| 九九九在线观看| 久久久精品国产免费观看同学| 乱子伦视频在线看| 久久国产中文字幕| 久久久久久久久一区| 久久夜夜操妹子| 色噜噜国产精品视频一区二区| 日本黄色不卡视频| 日韩亚洲电影在线| 伊人久久亚洲综合| 亚洲六月丁香色婷婷综合久久| 国产精品久久久久野外| 美腿丝袜在线亚洲一区| 日韩人妻一区二区三区蜜桃视频| 97色成人综合网站| 亚洲aⅴ男人的天堂在线观看| 欧美理论片在线播放| 精品亚洲国产成av人片传媒| 国产精品无码一区二区桃花视频| 在线欧美小视频| 日韩欧美中文字幕视频| 国产精品高潮久久久久无| 在线xxxxx| 国产精品1区2区| av免费在线播放网站| 国产精品99视频| 五月天久久综合网| 久久99国产精品视频| 成人欧美在线视频| 国产盗摄——sm在线视频| 欧美国产视频日韩| 国产高清在线看| 亚洲欧美日韩国产中文| 国产精品欧美综合亚洲| 欧美日韩国产精品一区二区三区四区 | 欧美一级bbbbb性bbbb喷潮片| 超碰资源在线| 97成人精品区在线播放| 女厕盗摄一区二区三区| 88xx成人精品| 中文在线中文资源| 美女啪啪无遮挡免费久久网站| 性xxxx搡xxxxx搡欧美| 欧美精品久久一区| 国产香蕉视频在线| 欧美日韩国产激情| 在线免费看av网站| 久久精品一区八戒影视| 91丨porny丨九色| 国产成人av资源| 国产精品久久久久久久无码| 国产在线不卡一区| 亚洲AV无码久久精品国产一区| 国产精品影视在线观看| 美女网站视频在线观看| 国产在线视频一区二区三区| 国产毛片久久久久久| 日韩中文字幕亚洲一区二区va在线 | 五月婷六月丁香| 久久综合色一综合色88| 日本人添下边视频免费| 韩国成人精品a∨在线观看| 熟妇无码乱子成人精品| 久久精品国产久精国产| 肉色超薄丝袜脚交| 99久久99久久免费精品蜜臀| 国产人妻精品午夜福利免费| 国产一区二区三区在线观看免费 | 自拍视频一区| 国产日韩一区欧美| 中文字幕日韩在线| 美脚丝袜一区二区三区在线观看| jizz性欧美23| 日本免费高清一区二区| 午夜精品毛片| 国产精品自拍片| 亚洲乱亚洲高清| 青草视频在线观看视频| 欧美色综合网| 人妻激情另类乱人伦人妻| 欧美激情第8页| 成人在线免费在线观看| 久久99蜜桃精品| 91玉足脚交白嫩脚丫| 中文字幕免费不卡在线| 久久久久久欧美精品se一二三四| 欧美性猛交xxxx偷拍洗澡| 国产精品伦理一区| 91麻豆精品国产91久久久| 国产精品一区二区人人爽| 91精品国产综合久久精品麻豆| 天天操天天干天天干| 亚洲精品国产免费| 美女羞羞视频在线观看| 毛片精品免费在线观看| 国产精品迅雷| 国产精品吊钟奶在线| 国产精品nxnn| 欧美福利一区二区三区| 欧美色女视频| 影音欧美亚洲| 美女诱惑一区| 亚洲天堂网一区| 狠狠久久亚洲欧美| 久久天堂久久| 欧美一区午夜精品| 免费人成黄页在线观看忧物| 91精品国产黑色紧身裤美女| 欧美日本网站| 在线观看国产精品日韩av| 国产精品69xx| 91亚洲精品久久久| 国产精品2023| 欧美a级黄色大片| 好看的日韩av电影| 国产成人在线综合| 成人午夜短视频| 日韩av一二区| 亚洲高清中文字幕| 9i精品福利一区二区三区| 亚洲成人免费网站| 久久久久国产精品嫩草影院| 尤物九九久久国产精品的分类| 日产福利视频在线观看| 国产一区二区中文字幕免费看| 你懂的国产精品永久在线| 亚洲 国产 图片| av在线一区二区| 貂蝉被到爽流白浆在线观看| 在线影院国内精品| 黄色网址在线播放| 九九精品视频在线观看| 国产精品视频一区二区三区综合| 国产一区二区三区黄| 成人午夜国产| 激情深爱综合网| 99视频精品免费视频| 国产成人无码精品久久久久| 欧美日韩国产一区二区三区地区| 亚洲av少妇一区二区在线观看| 亚洲摸下面视频| 呦呦在线视频| 国产黑人绿帽在线第一区| 日韩区一区二| 久久99久久久久久| 成人h动漫精品一区二区| 日本少妇毛茸茸高潮| 欧美日韩中文字幕精品| 秋霞av鲁丝片一区二区| 久久久久久久久久久免费| 北条麻妃一区二区三区在线| 97中文字幕在线| 972aa.com艺术欧美| 台湾佬中文在线| 在线观看欧美日韩| 交100部在线观看| 日本一区二区在线视频| 日精品一区二区| 青青草视频网站| 色婷婷国产精品综合在线观看| 亚洲AV无码精品自拍| 日韩中文字幕欧美| 欧美a级大片在线| 一本色道久久99精品综合| 国产精品亚洲综合久久| 欧美xxxxx少妇| 一区二区三区在线播放| 国产精品久久欧美久久一区| 中日韩午夜理伦电影免费| 国产一区二区久久久久| 亚洲免费在线精品一区| 日韩制服丝袜先锋影音| 强制高潮抽搐sm调教高h| 欧美网站大全在线观看| 黄色免费网站在线观看| 精品久久久久久乱码天堂| 日本成人中文字幕在线视频| www.色小姐com| 日韩精品视频在线| 三级在线看中文字幕完整版| 亚洲欧洲国产精品久久| 久久成人综合网| 欧美极品jizzhd欧美18| 欧美性生活久久| 日日夜夜天天综合入口| 欧美一区二区在线视频观看| 久久精品网址| 久久精品国产亚洲av久| 色哟哟欧美精品| 美女尤物在线视频| 亚洲欧美电影在线观看| 99精品欧美一区二区三区综合在线| 中文字幕人妻精品一区|