<cite id="ffb66"></cite><cite id="ffb66"><track id="ffb66"></track></cite>
      <legend id="ffb66"><li id="ffb66"></li></legend>
      色婷婷久,激情色播,久久久无码专区,亚洲中文字幕av,国产成人A片,av无码免费,精品久久国产,99视频精品3
      網(wǎng)易首頁 > 網(wǎng)易號(hào) > 正文 申請(qǐng)入駐

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

      0
      分享至

      單一職責(zé)原則(Single Responsibility Principle,SRP)是 SOLID 五大原則中的第一條,由 Robert C. Martin(“Uncle Bob”)提出。它是軟件設(shè)計(jì)中最基礎(chǔ)、也最容易被誤用的原則。和它的名字不同,它并不是“一個(gè)類只做一件事”那么簡單,而是:

      一個(gè)類應(yīng)該只有一個(gè)引起其變化的原因。

      A class should have only one reason to change.

      SRP 專注于“變化來源”。它要求開發(fā)者將軟件中不同變化的方向分離,使每個(gè)類(或模塊)對(duì)一種變化負(fù)責(zé)。

      如果一個(gè)類承擔(dān)了多種不同類型的職責(zé),那么任何一種職責(zé)發(fā)生變化時(shí),都可能迫使類被修改,最終導(dǎo)致代碼變得脆弱、龐大、難以維護(hù)。

      一、為什么需要單一職責(zé)原則?

      軟件之所以會(huì)難維護(hù),很大程度上是因?yàn)椤岸鄠€(gè)變化糾纏在一起”。SRP 通過“解耦變化來源”來提高可維護(hù)性。

      (1)多個(gè)職責(zé)會(huì)讓類變得不穩(wěn)定

      例如,當(dāng)日志、業(yè)務(wù)邏輯、數(shù)據(jù)存儲(chǔ)、驗(yàn)證規(guī)則混在一個(gè)類里時(shí),其中任何一個(gè)需求變更都會(huì)讓整個(gè)類被修改。

      (2)修改一個(gè)功能容易破壞另一個(gè)功能

      當(dāng)職責(zé)混合時(shí),影響范圍無法隔離。一個(gè)修改可能引發(fā)連鎖錯(cuò)誤。

      (3)類越“胖”,越難測試

      不同職責(zé)對(duì)應(yīng)的依賴越來越多,編寫單元測試也越來越麻煩。

      (4)不利于復(fù)用

      你可能想復(fù)用其中一部分能力,卻不得不引入整個(gè)龐大的類。

      SRP 的目標(biāo)是:讓變化各自為政,而不是綁在一起互相拖累。

      二、SRP 的定義與本質(zhì)

      Uncle Bob 的經(jīng)典定義是:如果一個(gè)類有多個(gè)變化原因,那么它就承擔(dān)了多個(gè)職責(zé)。其關(guān)鍵不在于功能的數(shù)量,而在于變化來源的不同。

      例如,下面這個(gè)“訂單處理器”類承擔(dān)了三個(gè)彼此獨(dú)立的變化來源:

          def notify(self, order): ...    # 通知方式(因系統(tǒng)升級(jí)而變)

      這三類變化互不相關(guān),擠在同一個(gè)類里便違反了 SRP。

      SRP 的本質(zhì)是:

      ? 職責(zé)決定變化

      ? 變化決定邊界

      ? 邊界決定代碼結(jié)構(gòu)

      一個(gè)“職責(zé)”就是一種“未來可能變化的方向”。

      現(xiàn)實(shí)類比:為什么 SRP 如此重要?

      想象學(xué)校里一位老師同時(shí)負(fù)責(zé):教語文、數(shù)學(xué)、歷史、體育、心理輔導(dǎo)、班級(jí)行政管理。如果學(xué)校對(duì)“體育課”進(jìn)行課程改革:

      ? 這位老師需要調(diào)整體育課教學(xué)方案

      ? 但語文課、數(shù)學(xué)課、行政任務(wù)等都可能被連帶影響(時(shí)間沖突、工作壓力增大等)

      ? 其他課程也可能被迫改變排課方式

      這種變化互相干擾,就是 SRP 試圖避免的局面。

      如果每個(gè)老師只負(fù)責(zé)一門學(xué)科,那么課程改革僅影響對(duì)應(yīng)老師,不會(huì)牽連全校。

      SRP 做的就是:把變化來源分開,讓一個(gè)需求變化只影響一塊代碼,而不是“牽一發(fā)而動(dòng)全身”。

      三、Python 中常見的 SRP 違例場景

      Python 靈活的語法常導(dǎo)致類很快變得臃腫。

      以下是一些典型反例:

      (1)“全能處理器 / God Class”

      例如一個(gè)視圖類同時(shí)處理:數(shù)據(jù)校驗(yàn)、ORM 查詢、業(yè)務(wù)邏輯、異常處理、序列化、日志、通知推送。一旦任何一部分發(fā)生變化,都必須修改同一個(gè)類。

      (2)模型類承擔(dān)業(yè)務(wù)行為

      例如 Django model 中塞入校驗(yàn)規(guī)則、折扣計(jì)算、推送通知、導(dǎo)出報(bào)表,導(dǎo)致模型類因不同變化頻繁變動(dòng)。

      (3)工具類變成“垃圾桶”

      當(dāng) utils.py 中含有幾十種不相關(guān)的方法時(shí),它本質(zhì)上已經(jīng)不是“一個(gè)職責(zé)”,而是“多個(gè)變化來源的集合”。

      (4)控制器負(fù)責(zé)“所有事情”

      例如:

          ...

      一次需求改動(dòng)可能讓整個(gè)函數(shù)全部變動(dòng)。

      四、如何遵守 SRP:拆分的正確方式

      (1)按變化來源拆分類(最核心方法)

      從“訂單處理器”示例重新設(shè)計(jì):

              self.notifier.notify(order)

      職責(zé)明確、變化隔離。

      (2)使用抽象類(ABC)或協(xié)議(Protocol)隔離職責(zé)

      為職責(zé)定義接口,讓不同實(shí)現(xiàn)各自獨(dú)立變化。

          ...

      (3)函數(shù)級(jí)別也適用 SRP

      如果一個(gè)函數(shù)負(fù)責(zé)校驗(yàn)、計(jì)算、轉(zhuǎn)換格式,那么它承擔(dān)了三個(gè)變化來源。建議拆分為:

      def format_response(order): ...

      (4)適度拆分,不要過度設(shè)計(jì)

      如果兩個(gè)功能總是一起變化,那么它們屬于同一職責(zé),不用拆。

      例如 Point 與 distance 計(jì)算、User 對(duì)象與其基本字段轉(zhuǎn)換,通常不必分開。

      SRP 的目的是降低變化的影響,而不是追求碎片化設(shè)計(jì)。

      五、實(shí)例:用 SRP 優(yōu)化一個(gè)現(xiàn)實(shí)場景

      不符合 SRP:一個(gè)類承擔(dān)所有職責(zé)

          def send_email(self, pdf): ...

      四種變化來源:數(shù)據(jù)來源變、分析規(guī)則變、渲染方式變、通知渠道變。任何一處變化都會(huì)影響整個(gè)類。

      符合 SRP:職責(zé)清晰的設(shè)計(jì)

              self.sender.send(pdf)

      每個(gè)類都只有一個(gè)變化原因,類結(jié)構(gòu)更加可靠。

      小結(jié)

      單一職責(zé)原則要求一個(gè)類應(yīng)當(dāng)僅有一個(gè)引起變化的原因。它并不限制一個(gè)類做多少事,而是強(qiáng)調(diào)“一個(gè)類的所有行為必須屬于同一種變化來源”。遵循 SRP 可帶來更穩(wěn)定的設(shè)計(jì)、更低的維護(hù)成本、更高的可擴(kuò)展性以及更易理解與測試的代碼結(jié)構(gòu)。在 Python 這類動(dòng)態(tài)語言中,由于缺乏編譯期檢查,更需開發(fā)者主動(dòng)運(yùn)用 SRP 來構(gòu)建健壯的代碼模型。作為 SOLID 原則的基石,SRP 幫助代碼在變化中保持穩(wěn)定,而非陷入混亂。


      點(diǎn)贊有美意,贊賞是鼓勵(lì)

      特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。

      Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

      相關(guān)推薦
      熱點(diǎn)推薦
      29歲網(wǎng)紅口子姐去世,父親病逝,自曝得梅毒,欠債太多下海惹爭議

      29歲網(wǎng)紅口子姐去世,父親病逝,自曝得梅毒,欠債太多下海惹爭議

      攬星河的筆記
      2026-01-13 13:05:05
      臉都不要了!格力新空調(diào)的箱子正面直接印著“全銅管”這幾個(gè)字

      臉都不要了!格力新空調(diào)的箱子正面直接印著“全銅管”這幾個(gè)字

      忠于法紀(jì)
      2026-01-13 20:43:38
      郭有才在央視講《道德經(jīng)》,這真不是個(gè)笑話

      郭有才在央視講《道德經(jīng)》,這真不是個(gè)笑話

      關(guān)爾東
      2026-01-12 16:28:55
      盯上6000米深海稀土!日本派船探查,距中國加強(qiáng)兩用物項(xiàng)出口管制不到一周!高市早苗已決定提前大選

      盯上6000米深海稀土!日本派船探查,距中國加強(qiáng)兩用物項(xiàng)出口管制不到一周!高市早苗已決定提前大選

      每日經(jīng)濟(jì)新聞
      2026-01-13 15:11:06
      女孩高考暈倒確診骨癌!自己簽字進(jìn)行6次手術(shù)截肢,上海醫(yī)生全力救治

      女孩高考暈倒確診骨癌!自己簽字進(jìn)行6次手術(shù)截肢,上海醫(yī)生全力救治

      環(huán)球網(wǎng)資訊
      2026-01-12 19:00:39
      印度網(wǎng)友:中國拍了那么多戰(zhàn)爭電影,可為啥從不拍關(guān)于中印的戰(zhàn)爭

      印度網(wǎng)友:中國拍了那么多戰(zhàn)爭電影,可為啥從不拍關(guān)于中印的戰(zhàn)爭

      李健政觀察
      2026-01-13 09:39:34
      前一天促銷,后一天閉店!記者調(diào)查“洗臉熊”門店跑路背后:明星代言難掩預(yù)付卡監(jiān)管“黑洞”

      前一天促銷,后一天閉店!記者調(diào)查“洗臉熊”門店跑路背后:明星代言難掩預(yù)付卡監(jiān)管“黑洞”

      華夏時(shí)報(bào)
      2026-01-13 19:50:05
      伴郎破壞婚禮后續(xù):正臉被扒已社死,新娘發(fā)聲,新郎只會(huì)和稀泥!

      伴郎破壞婚禮后續(xù):正臉被扒已社死,新娘發(fā)聲,新郎只會(huì)和稀泥!

      有范又有料
      2026-01-13 16:43:09
      果然不出所料,委內(nèi)瑞拉的石油“有問題”,只有中國能安穩(wěn)開采!

      果然不出所料,委內(nèi)瑞拉的石油“有問題”,只有中國能安穩(wěn)開采!

      古事尋蹤記
      2026-01-13 07:10:23
      許世友癡迷茅臺(tái),但他每個(gè)月只有400塊工資,是如何頓頓喝到的?

      許世友癡迷茅臺(tái),但他每個(gè)月只有400塊工資,是如何頓頓喝到的?

      大千世界觀
      2026-01-12 21:54:33
      特斯拉授予高級(jí)副總裁朱曉彤超52萬股股票期權(quán):行權(quán)價(jià)435.8美元,完全歸屬要等五年后

      特斯拉授予高級(jí)副總裁朱曉彤超52萬股股票期權(quán):行權(quán)價(jià)435.8美元,完全歸屬要等五年后

      新浪財(cái)經(jīng)
      2026-01-13 21:28:27
      唏噓?皇馬僅花20分鐘解雇阿隆索!老佛爺飛機(jī)上拍板 賠5個(gè)月薪水

      唏噓?皇馬僅花20分鐘解雇阿隆索!老佛爺飛機(jī)上拍板 賠5個(gè)月薪水

      我愛英超
      2026-01-13 08:50:02
      一部灣灣電影,扯下內(nèi)娛最后的遮羞布!

      一部灣灣電影,扯下內(nèi)娛最后的遮羞布!

      編劇藍(lán)羽生
      2026-01-13 15:46:04
      雷軍轉(zhuǎn)發(fā)“詛咒”帖引巨大爭議

      雷軍轉(zhuǎn)發(fā)“詛咒”帖引巨大爭議

      電動(dòng)知家
      2026-01-13 10:04:15
      價(jià)格接近“腰斬”!大量上市,浙江老板卻發(fā)愁:賣不出去啊...過年前價(jià)格或要漲!

      價(jià)格接近“腰斬”!大量上市,浙江老板卻發(fā)愁:賣不出去啊...過年前價(jià)格或要漲!

      浙江之聲
      2026-01-13 08:14:16
      U23亞洲杯一夜2隊(duì)出線!8強(qiáng)已定5席 韓國輸球仍晉級(jí) 伊朗墊底回家

      U23亞洲杯一夜2隊(duì)出線!8強(qiáng)已定5席 韓國輸球仍晉級(jí) 伊朗墊底回家

      侃球熊弟
      2026-01-13 21:36:50
      “為用優(yōu)惠券,90元物品分兩次結(jié)算遭嘲諷”?女子稱在“零食有鳴”購物被鎖店內(nèi);多方回應(yīng)

      “為用優(yōu)惠券,90元物品分兩次結(jié)算遭嘲諷”?女子稱在“零食有鳴”購物被鎖店內(nèi);多方回應(yīng)

      大風(fēng)新聞
      2026-01-13 18:13:32
      青海獨(dú)家回應(yīng):4名評(píng)標(biāo)專家“餓暈”當(dāng)天經(jīng)歷了什么

      青海獨(dú)家回應(yīng):4名評(píng)標(biāo)專家“餓暈”當(dāng)天經(jīng)歷了什么

      中國新聞周刊
      2026-01-13 18:25:10
      格陵蘭發(fā)達(dá)到什么水平?我去了才發(fā)現(xiàn),差距真的太大

      格陵蘭發(fā)達(dá)到什么水平?我去了才發(fā)現(xiàn),差距真的太大

      娛樂八卦木木子
      2026-01-07 15:14:07
      提前5個(gè)月,北京火箭大街正式交付

      提前5個(gè)月,北京火箭大街正式交付

      新京報(bào)
      2026-01-13 18:36:03
      2026-01-13 23:43:00
      MediaTea
      MediaTea
      專業(yè)的數(shù)字媒體、新媒體技術(shù)
      1704文章數(shù) 72關(guān)注度
      往期回顧 全部

      科技要聞

      每年10億美元!谷歌大模型注入Siri

      頭條要聞

      員工被辭退索賠89萬遭公司反訴索賠214萬 歷時(shí)2年判了

      頭條要聞

      員工被辭退索賠89萬遭公司反訴索賠214萬 歷時(shí)2年判了

      體育要聞

      他帶出國乒世界冠軍,退休后為愛徒返場

      娛樂要聞

      蔡卓妍承認(rèn)新戀情,與男友林俊賢感情穩(wěn)定

      財(cái)經(jīng)要聞

      "天量存款"將到期 資金會(huì)否搬入股市?

      汽車要聞

      限時(shí)9.99萬元起 2026款啟辰大V DD-i虎鯨上市

      態(tài)度原創(chuàng)

      房產(chǎn)
      教育
      本地
      公開課
      軍事航空

      房產(chǎn)要聞

      又一新校開建!海口這一片區(qū),迎來教育重磅升級(jí)!

      教育要聞

      最慘英國大學(xué)!

      本地新聞

      云游內(nèi)蒙|到巴彥淖爾去,赴一場塞上江南的邀約

      公開課

      李玫瑾:為什么性格比能力更重要?

      軍事要聞

      美媒:美對(duì)伊朗行動(dòng)選項(xiàng)"遠(yuǎn)超傳統(tǒng)空襲"

      無障礙瀏覽 進(jìn)入關(guān)懷版 主站蜘蛛池模板: 97超碰人妻| 中文国产不卡一区二区| 狠狠噜天天噜日日噜| 久久亚洲熟女cc98cm | 欧美国产在线一区| 人人妻一区二区三区| 人妻无码一区二区三区| 综合久久亚洲| 无码一级视频在线| 国产亚洲AV天天夜夜无码| 亚洲成人动漫在线| 日韩中文字幕在线六区| 久久天天躁狠狠躁夜夜不卡公司 | 成人在线免费视频亚洲| 欧美性69式xxxx护士| 午夜国产精品福利一二| 在线毛片免费| 国精品99久9在线 | 免费| 郸城县| 黑人巨茎大战白人美女| 亚洲欧洲自拍| 亚洲AV网站| 福利姬白浆AV导航| 亚洲国产成人一区二区在线| 激情自拍校园春色中文| 人妻人人爽| 久久久久人妻一区二区三区| 99色区| 亚洲自拍小说| 青青草av| 一本久久a精品一区二区| 成人国产一区二区三区精品| 无码日日模日日碰夜夜爽| 一本色道久久综合无码人妻 | 免费久久人人爽人人爽AV| 国产成人精品无码专区| 欧美 亚洲 中文 国产 综合| 瑞丽市| 黑人好猛厉害爽受不了好大撑| 中文字幕av一区| 中文字幕人妻熟女人妻a片|