五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

架構(gòu)整潔之道(SOLID篇)

2023-04-28 15:13 作者:防輻射君  | 我要投稿

SRP:?jiǎn)我宦氊?zé)原則

廣泛定義:任何一個(gè)軟件模塊都應(yīng)該有且只有一個(gè)被修改的原因。

現(xiàn)實(shí)生產(chǎn)中,軟件往往要滿足一些需求,必須要做出各種各樣的修改。而該系統(tǒng)的用戶或所有者就是該設(shè)計(jì)原則中指的“被修改的原因”。

定義Pro:任何一個(gè)軟件模塊都應(yīng)該只對(duì)某一類行為者負(fù)責(zé)。

例子

calculatePay、reportHours、save分別對(duì)應(yīng)了CFO、COO、CTO三方面,而這三個(gè)行為如果放在一個(gè)模塊里,實(shí)際上就是被耦合在了一起。

試想一下:calculatePay方法和reportHours方法使用同樣的邏輯來(lái)計(jì)算工時(shí),一般程序員會(huì)把計(jì)算工時(shí)的方法實(shí)現(xiàn)為一個(gè)函數(shù),如:regularHours

而接下來(lái),CFO團(tuán)隊(duì)想要修改regularHours方法,其他團(tuán)隊(duì)不需要,這時(shí)就會(huì)出現(xiàn)問(wèn)題。因?yàn)槲覀儗⒉煌袨檎叩囊蕾噷懺诹艘黄稹?/p>

除了上面這個(gè)問(wèn)題,代碼合并也是因?yàn)橐粋€(gè)模塊。

解決方案

最核心的方案在于把相關(guān)的函數(shù),劃分到不同的類里。

方案一:

最簡(jiǎn)單的就是將數(shù)據(jù)層與邏輯層分離,設(shè)計(jì)一個(gè)三個(gè)類共同使用的一個(gè)EmployeeData類。

缺點(diǎn):

現(xiàn)在有三個(gè)類需要維護(hù)了。

方案二:

Facade模式

OCP: 開閉原則

良好的計(jì)算機(jī)軟件應(yīng)該易于擴(kuò)展,同時(shí)抗拒修改。

這其實(shí)也是我們研究軟件架構(gòu)的根本目的,如果對(duì)一個(gè)原始需求的小小延伸就要修改大部分的話,那這個(gè)軟件架構(gòu)無(wú)疑是非常失敗的。

以下為一個(gè)需求SRP后的流程

明確需求后,就可以修改源碼間的依賴關(guān)系了,保證修改一個(gè)操作不會(huì)影響其他的操作。

這個(gè)系統(tǒng)中很重要的一點(diǎn)就是所有模塊間的跨越都是單向的

LSP:里氏替換原則

如果對(duì)于每個(gè)類型是S的對(duì)象o1都存在一個(gè)類型為T 的對(duì)象o2,能使操作T類型的程序P在用o2替換o1時(shí)保持行為不變,我們就可以將S成為T的子類型。

例子

假設(shè)我們有一個(gè)License類

這就是符合LSP原則的

ISP:接口隔離原則

此原則來(lái)源于以下情況

有多個(gè)用戶想要使用OPS類,但是User1只要使用op1,User2使用op2,User3使用op3。這就導(dǎo)致,如果我們對(duì)op2做任何修改,User1即使不受影響,也要重新編譯和部署。

DIP:控制反轉(zhuǎn)原則

如果想要設(shè)計(jì)一個(gè)靈活的系統(tǒng),那么在源碼的層面,依賴關(guān)系中應(yīng)該多引用抽象類型,而不是具體實(shí)現(xiàn)。

穩(wěn)定的抽象層

每次修改接口的時(shí)候,一定會(huì)去修改實(shí)現(xiàn),而反過(guò)來(lái)卻很少要去修改抽象接口,所以我們可以認(rèn)為接口比實(shí)現(xiàn)更穩(wěn)定。因此:

  • 應(yīng)該在代碼中多使用 抽象接口,盡量避免使用那些多變的具體實(shí)現(xiàn)類。(抽象工廠)

  • 不要在具體實(shí)現(xiàn)類上創(chuàng)建衍生類。

  • 不要覆蓋包含具體實(shí)現(xiàn)的函數(shù)。

  • 應(yīng)該避免在代碼中寫入與任何具體實(shí)現(xiàn)相關(guān)的名字,或者是其他容易變動(dòng)事物的名字。

工廠模式


架構(gòu)整潔之道(SOLID篇)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
腾冲县| 延边| 泰兴市| 墨竹工卡县| 商洛市| 怀仁县| 新平| 林周县| 雷山县| 宁德市| 积石山| 霍城县| 吉木乃县| 天镇县| 锡林郭勒盟| 咸宁市| 泰兴市| 富宁县| 中方县| 诏安县| 公主岭市| 泽州县| 科尔| 沛县| 阿克| 溧阳市| 富源县| 巩义市| 阜新市| 措美县| 沅陵县| 蛟河市| 安康市| 蓬莱市| 临汾市| 理塘县| 齐齐哈尔市| 于都县| 宣威市| 扎囊县| 尼木县|