一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

開閉架構(gòu)

 編程一生 2023-06-28 發(fā)布于北京

《不過時的經(jīng)典層架構(gòu)》里,有朋友留言關(guān)于Manager和Engine的概念,雖然朋友留言把概念解釋清楚了。為了避免其他人有同樣的疑問,這里我還是再解釋一下。

以上是經(jīng)典的四層架構(gòu),在這個架構(gòu)中,Manager和Engine(引擎)都是業(yè)務(wù)邏輯層的概念。Manager中文就是管理者,就是把行為管理起來。Engine是行為本身。咱們超出業(yè)務(wù)邏輯層,針對這個概念本身來看,什么是引擎行為呢?咱們很多朋友聽說過搜索引擎、計算引擎吧。為什么搜索引擎稱之為引擎呢?因?yàn)樗话悴皇仟?dú)立使用的,一般是嵌入到網(wǎng)站上,作為網(wǎng)站上的一個行為,這個行為是對信息進(jìn)行組織處理后,為用戶提供檢索服務(wù),并將相關(guān)信息展示給用戶。這個行為最重要的特點(diǎn)是整套一起使用。如果整套都是一起使用,易變性低,可以作為基礎(chǔ)操作,這就可以稱之引擎。Manager管理者這個角色與Engine引擎最大的不同就是易變性上,它組織了一個或者多個行為,如果這些行為都是一起使用,序列也不變,那也可以叫一個引擎。就像搜索引擎里綜合信息處理,提供檢索服務(wù)一樣。但是序列,也就是行為的組織方式易變,那就需要一個管理者來組織。下面會有例子說明為什么一定要清楚這個。

下面來說一下今天的正題,開閉架構(gòu)。

開放架構(gòu)

在開放架構(gòu)中,無論組件在哪一層,都可以隨意進(jìn)行調(diào)用。這些調(diào)用關(guān)系包含向上層調(diào)用,向下層調(diào)用,平行調(diào)用。開放架構(gòu)提供了無止境的靈活性,但是犧牲了封裝性,引入了耦合。

比如向上層調(diào)用:在四層架構(gòu)中,業(yè)務(wù)層調(diào)用客戶端。一旦UI變了,業(yè)務(wù)層就也得跟著變了。

但是實(shí)際中,那么傻的事情是很少發(fā)生的。但是,實(shí)際上有時候我們非常想,我暴露一個對外接口,這個接口作用就是調(diào)用一下數(shù)據(jù)庫做個處理。我何苦這么麻煩,先封裝一個XXManager,XXManager調(diào)用XXEngine,XXEngine還要調(diào)用XXAccess。其實(shí)這些里面只是直接調(diào)用了下一層,其他什么也沒有做,直接調(diào)用數(shù)據(jù)庫多省事啊。這里面就涉及到易變性封裝的問題,客戶端需求變了,要動很底層。

所以,當(dāng)然,開放架構(gòu)是目前不推薦的架構(gòu)形式。

封閉架構(gòu)

在封閉架構(gòu)中,不允許向上層調(diào)用和同級調(diào)用,只允許向下調(diào)用。這樣就犧牲了靈活性,但是封裝了易變性,同時促進(jìn)解耦。也是一般比較推薦的架構(gòu)。

但在咱們實(shí)際的項目中,會有一些同級調(diào)用的沖動。就是這種沖動會讓代碼很難維護(hù)。比如有段邏輯A,是Manager層的。另外來了一個需求B,正好可以復(fù)用這部分代碼,同時增加一些其他邏輯。那本著代碼復(fù)用,減少重復(fù)代碼的原則,我應(yīng)該直接調(diào)用A啊。為了不打亂層級,我把這段公共代碼抽到下一層Engine層。那這段邏輯也要調(diào)用Engine層啊,不又是同級調(diào)用了嗎?按照我的經(jīng)驗(yàn),一般這種情況是習(xí)慣于Engine層很薄導(dǎo)致的,可以檢查一下Engine同級調(diào)用的地方是不是可以直接調(diào)用Access不會引起很多重復(fù)代碼。如果不行,那說明咱們的業(yè)務(wù)邏輯過于復(fù)雜,四層不夠,架構(gòu)設(shè)計少了一層。

半開半閉架構(gòu)

在半開半閉架構(gòu)中,允許向下多層調(diào)用。我記得十幾年前,我特別喜歡寫數(shù)據(jù)庫存儲過程,代碼端可干凈了。因?yàn)檫壿嬋跀?shù)據(jù)庫那里,這個時候開放架構(gòu)是很合適的,因?yàn)橐坏┯懈膭樱诵母膭狱c(diǎn)在存儲過程,上面都要跟著變,當(dāng)然上層越少越好了。但是現(xiàn)在大型項目都不推薦使用存儲過程了,最重要的一點(diǎn)就是易變性。

這種調(diào)用也是封裝性和靈活性的妥協(xié),也是要避免的。

封閉架構(gòu)中規(guī)則的放松

封閉架構(gòu)過于嚴(yán)格,有些代碼編寫就會殊為不易。所以它有兩個明確的放松規(guī)則的例外:

調(diào)用工具

像日志和監(jiān)控埋點(diǎn)等工具,其他層均可調(diào)用。

弱引用

比如在兩個Manager之間使用了隊列作為調(diào)用方式,因?yàn)槭侨跻?,是允許同級調(diào)用的。

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    大尺度激情福利视频在线观看| 欧美人妻一区二区三区| 久久偷拍视频免费观看| 国产福利一区二区久久| 日韩中文字幕人妻精品| 高清国产日韩欧美熟女| 亚洲天堂精品1024| 日韩欧美一区二区不卡视频| 操白丝女孩在线观看免费高清| 亚洲国产香蕉视频在线观看| 亚洲欧美国产精品一区二区| 自拍偷拍一区二区三区| 国产欧美性成人精品午夜| 国产水滴盗摄一区二区| 亚洲国产精品久久精品成人| 人妻乱近亲奸中文字幕| 国产又大又黄又粗又免费| 美女露小粉嫩91精品久久久| 高清一区二区三区不卡免费| 日韩精品第一区二区三区| 一二区中文字幕在线观看| 日本欧美一区二区三区高清| 欧美午夜国产在线观看| 亚洲精品福利视频你懂的| 欧美日韩国产一级91| 在线欧美精品二区三区| 中文字幕久热精品视频在线| 在线一区二区免费的视频| 99久久精品视频一区二区| 日本成人中文字幕一区| 亚洲国产精品久久琪琪| 欧美日韩免费黄片观看| 欧美尤物在线观看西比尔| 九九九热视频最新在线| 国产又大又硬又粗又湿| 亚洲第一区欧美日韩在线| 亚洲专区中文字幕在线| 老鸭窝精彩从这里蔓延| 午夜激情视频一区二区| 高清不卡一卡二卡区在线| 日本加勒比在线观看一区|