書名: 貫穿設(shè)計(jì)模式:用一個(gè)電商項(xiàng)目詳解設(shè)計(jì)模式作者名: 偉山育琪本章字?jǐn)?shù): 1146字更新時(shí)間: 2024-12-28 11:44:54
1.2 設(shè)計(jì)模式的原則
1.2.1 單一職責(zé)原則
引用百度詞條對(duì)單一職責(zé)原則的定義:“單一職責(zé)原則(Single Responsibility Principle,SRP)又稱單一功能原則,面向?qū)ο笪鍌€(gè)基本原則(SOLID)之一。它規(guī)定一個(gè)類應(yīng)該只有一個(gè)發(fā)生變化的原因。該原則是Robert C. Martin于《敏捷軟件開發(fā):原則、模式與實(shí)踐》一書中給出的。Martin表示此原則是基于Tom DeMarco和Meilir Page-Jones的著作中的內(nèi)聚性原則發(fā)展出的。”
單一職責(zé)原則,強(qiáng)調(diào)的是職責(zé)的分離,一個(gè)類,只需要負(fù)責(zé)一種職責(zé)即可,一個(gè)類發(fā)生變化的原因,必然是所負(fù)責(zé)的職責(zé)發(fā)生變化。這聽起來很抽象,干澀的文字描述可能會(huì)讓經(jīng)驗(yàn)稍淺的讀者產(chǎn)生一定的困惑,可實(shí)際上,從我們接觸代碼的那一刻起,已經(jīng)時(shí)時(shí)刻刻地在遵守單一職責(zé)原則。
· main函數(shù)所在的類,作為程序的啟動(dòng)入口,職責(zé)單一。
· SpringBoot框架的啟動(dòng)類是單一職責(zé)原則最完美的寫照。
· 我們創(chuàng)建的utils工具類,對(duì)日期的處理一般會(huì)封裝到一個(gè)DateUtils.java中,職責(zé)單一。即便我們將所有的工具類方法封裝到一個(gè)統(tǒng)一的CommonUtils.java中,也依然遵循了單一職責(zé)原則,因?yàn)樗穆氊?zé)就是工具。
· 大家眾所周知的MVC框架,提倡將接入層Controller、服務(wù)層Service、持久層DAO分別進(jìn)行實(shí)現(xiàn),劃分不同的職責(zé),也遵循了單一職責(zé)原則。
……
單一職責(zé)原則,是一個(gè)備受爭(zhēng)議的原則,也是設(shè)計(jì)模式最為基礎(chǔ)的原則。備受爭(zhēng)議的原因是,每個(gè)人對(duì)職責(zé)劃分的看法不一樣,不同項(xiàng)目需求所面臨的挑戰(zhàn)和劃分方式不一樣。我們以一個(gè)簡(jiǎn)單的“用戶注冊(cè)和用戶登錄”需求為例,展開一場(chǎng)討論,相信這個(gè)需求對(duì)讀者來說是非常簡(jiǎn)單的,很快就能書寫以下代碼。

這是一個(gè)非常完美的設(shè)計(jì),UserService類完全遵循了單一職責(zé)原則,不管是register注冊(cè)功能還是login登錄功能,都屬于“用戶操作”的相關(guān)職責(zé),簡(jiǎn)單的注冊(cè)和登錄功能,用粗粒度的“用戶操作”職責(zé)進(jìn)行了正確的劃分。
然而,如果登錄功能需要滿足多種第三方賬號(hào)授權(quán)登錄,注冊(cè)功能需要進(jìn)行短信、郵箱等動(dòng)態(tài)碼驗(yàn)證,金融相關(guān)軟件還需要進(jìn)行身份證驗(yàn)證和人臉識(shí)別等一系列附加功能,我們可能就要考慮將登錄功能和注冊(cè)功能以更加細(xì)粒度的職責(zé)進(jìn)行劃分。
(1)登錄功能單獨(dú)劃分,提供默認(rèn)登錄方式(擁有本站賬號(hào)的用戶)和第三方賬號(hào)的驗(yàn)證及登錄功能。

(2)注冊(cè)功能單獨(dú)劃分,分為注冊(cè)功能以及注冊(cè)過程中所需要的相關(guān)驗(yàn)證功能如下。

這樣的設(shè)計(jì)也是非常正確的,隨著業(yè)務(wù)的復(fù)雜程度越來越高,每一個(gè)細(xì)粒度的職責(zé)都可能擁有非常復(fù)雜的邏輯,那么我們就要考慮是否可以按照項(xiàng)目需求進(jìn)行更加細(xì)粒度的職責(zé)拆分,從而保證單一職責(zé)原則下的低耦合度。當(dāng)然,部分讀者會(huì)認(rèn)為,是否可以將“手機(jī)驗(yàn)證功能”和“郵箱驗(yàn)證功能”再次進(jìn)行單一職責(zé)的劃分?當(dāng)然可以,但是要避免過度的職責(zé)拆分,要根據(jù)項(xiàng)目需求的復(fù)雜程度進(jìn)行合理的規(guī)劃。
最后,我想對(duì)廣大讀者說的是,單一職責(zé)原則的劃分沒有正確與錯(cuò)誤之分,每個(gè)開發(fā)者都有自己的考量角度和劃分方式。一切都應(yīng)該以項(xiàng)目實(shí)際情況為出發(fā)點(diǎn)進(jìn)行設(shè)計(jì),因地制宜才是我們真正需要遵守的原則。
- 企業(yè)微信實(shí)戰(zhàn)解密:營銷、運(yùn)營與微信電商O2O
- 網(wǎng)絡(luò)創(chuàng)業(yè)
- 網(wǎng)店短視頻制作實(shí)戰(zhàn)寶典:Premiere Pro+After Effects
- 電子商務(wù)實(shí)戰(zhàn)基礎(chǔ):新媒體營銷實(shí)戰(zhàn)
- 移動(dòng)互聯(lián)下的超市升級(jí)
- 打動(dòng)人心:電商文案策劃與視覺營銷
- 玩賺你的網(wǎng)站:網(wǎng)站運(yùn)營從業(yè)人員必備手冊(cè)
- 贏在運(yùn)營:互聯(lián)網(wǎng)用戶、社群、社區(qū)運(yùn)營
- 人人都能做生鮮
- 巧妙玩轉(zhuǎn)精準(zhǔn)引流
- 區(qū)塊鏈很簡(jiǎn)單:鏈圈入門與生存指南
- 直播電商實(shí)戰(zhàn)一本通
- 國際商務(wù)—理論與實(shí)務(wù)
- 互聯(lián)網(wǎng)大敗局
- 抖商:微商的未來與出路