日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

架构风格:万金油CS与分层

發(fā)布時間:2025/6/15 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 架构风格:万金油CS与分层 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

計算機科學家David Wheele曾說過這么一句話:

All problems in computer science can be solved by another level of indirection
意思是:「 計算機科學領(lǐng)域的任何問題都可以通過增加一個間接的中間層來解決」。

這也是CS架構(gòu)和分層架構(gòu)的核心思想!

將CS架構(gòu)和分層架構(gòu)放在一起討論除了上面的原因之外,還有如下幾個原因:

  • CS架構(gòu)和分層架構(gòu)是使用很頻繁的兩種架構(gòu)風格
  • CS架構(gòu)和分層架構(gòu)一般都會結(jié)合使用
  • CS架構(gòu)中的2-tier,3-tier,N-tier與分層架構(gòu)容易混淆,畢竟Tier和Layer都翻譯為「層」

本文將探討如下幾個問題:

  • CS架構(gòu)風格的約束
  • CS架構(gòu)風格對架構(gòu)屬性的影響
  • 2-tier,3-tier,N-tier架構(gòu)模式
  • 分層架構(gòu)風格的約束
  • 分層架構(gòu)風格對架構(gòu)屬性的影響
  • Tier和Layer的區(qū)別「為什么兩層架構(gòu)(2-tier)、三層架構(gòu)(3-tier)、N層架構(gòu)(N-tier)是CS架構(gòu)風格的具體體現(xiàn),而不是分層(Layer)架構(gòu)風格的具體體現(xiàn)?!」
  • CS架構(gòu)風格和分層架構(gòu)風格適用哪些場景

CS架構(gòu)風格的約束

  • Server組件提供了一組服務,并監(jiān)聽對這些服務的請求,
  • Client組件通過一個連接器將請求發(fā)送到Server,希望執(zhí)行一個服務,
  • Server可以拒絕這個請求,也可以執(zhí)行這個請求并將響應發(fā)送回Client。

CS架構(gòu)風格最簡單的實現(xiàn)就是2-tier!即兩層架構(gòu)模式。比如SSH,FTP就是兩層架構(gòu)。以FTP來說:

  • 遠程有一個FTP文件服務器
  • 我們需要使用FTP客戶端去連接那個文件服務器
  • 如果用戶名密碼錯誤,服務器會拒絕連接
  • 連接上以后,客戶端可以下載或上傳文件到服務端

最常用的CS架構(gòu)風格的實現(xiàn)應該是3-tier!三層架構(gòu)一般分為:

  • Presentation tier 表現(xiàn)層
  • Logic tier 業(yè)務邏輯層
  • Data access tier 數(shù)據(jù)訪問層

CS架構(gòu)風格使得客戶端與服務端能夠獨立進化,提高了架構(gòu)的「伸縮性」;架構(gòu)層面代碼隔離,提高了「可維護性」。
由于系統(tǒng)被拆分成了Client和Server,Client與Server端的通信可能會稍微影響「性能」!

分層架構(gòu)的約束

  • 按照層次來進行組織,每個層都有特定的責任
  • 每一層為在其之上的層提供服務,并且使用在其之下的層所提供的服務
  • 較低層不可使用較高層中的服務
  • 一般不跨層調(diào)用

分層架構(gòu)一般分為四層,和CS架構(gòu)風格非常類似,:

  • Presentation layer 表現(xiàn)層 (Controller層可以屬于這一層)
  • Application layer 應用層 (常說的Service層就屬于這一層)
  • Business layer 業(yè)務邏輯層(領(lǐng)域?qū)ο髮訉儆谶@一層)
  • Data access layer 數(shù)據(jù)訪問層(持久層,日志,網(wǎng)絡(luò)層等)

分層架構(gòu)風格使得組件高內(nèi)聚、低耦合,每個組件能獨立進化,提高了架構(gòu)的「伸縮性」;組件層面代碼隔離,提高了「可維護性」;層與層之間調(diào)用限制,可方便的替換對應的層,方便了「組件復用」以及「可移植性」!
由于一個請求可能需要經(jīng)過多層來處理,層與層之間的通信會影響到「性能」!

Tier與Layer

不知道你有沒有疑問?2-tier、3-tier、N-tier架構(gòu)模式為什么是CS架構(gòu)風格的實現(xiàn)?而不是分層架構(gòu)風格的實現(xiàn)?畢竟Tier與Layer都翻譯為「層」!

這里先說下Tier和Layer的區(qū)別!

網(wǎng)絡(luò)上有兩種解釋:

  • 一種解釋是,Tier是縱切,Layer是橫切
  • 另一種解釋是,Tier是物理層,Layer是邏輯層

先說第一種解釋,縱切和橫切是什么意思呢?看上面三層架構(gòu)圖,表現(xiàn)層、邏輯層、數(shù)據(jù)層由上至下排列,看起來好像是被刀橫向切過一樣,這就是橫切。縱切就是表現(xiàn)層、邏輯層、數(shù)據(jù)層由左至右排列,看起來好像是被刀縱向切過一樣。

很明顯,這個解釋說不通,架構(gòu)圖只是示意而已,組件如何擺放可能和個人習慣有關(guān)。上面的三層架構(gòu)圖來自wiki,它是一個橫切圖,但是它是3-tier!

相對的,第二種解釋就比較合理。Tier是物理層,Layer是邏輯層。上面的例子中,三層架構(gòu)的表現(xiàn)層、邏輯層、數(shù)據(jù)層都是可獨立部署的,也就是物理層。而Controller層,Service層,Model層等,是在一個應用中的,是邏輯劃分的,不能獨立部署。

維基百科在「多層架構(gòu)」里也間接支持了這個觀點:

In a 「logical multilayered architecture」 for an information system with an object-oriented design, the following four are the most common:Presentation layer,Application layer,Business layer,Data access layer
在面向?qū)ο笤O(shè)計的「邏輯分層架構(gòu)」中,系統(tǒng)一般被分為:表現(xiàn)層,應用層,業(yè)務層和數(shù)據(jù)訪問層

那我們?nèi)绾谓忉尅?-tier、3-tier、N-tier架構(gòu)模式是CS架構(gòu)風格的實現(xiàn)這個問題呢?」!

其實很簡單,2-tier是一個Client和Server進行通信!那么你可以這么看3-tier架構(gòu)模式:

  • 數(shù)據(jù)層相對于邏輯層來說,就是個Server,為邏輯層提供數(shù)據(jù)服務;邏輯層相對于數(shù)據(jù)層來說,就是個Client,請求數(shù)據(jù)層獲取數(shù)據(jù)
  • 邏輯層相對于表現(xiàn)層來說,就是個Server,為表現(xiàn)層提供服務;表現(xiàn)層相對于邏輯層來說,就是個Client,請求邏輯層處理相應邏輯

N-tier架構(gòu)模式類似,就不贅述了!

微妙關(guān)系

CS架構(gòu)風格和分層架構(gòu)風格其實關(guān)系比較微妙!

舉個簡單的例子,一般架構(gòu)設(shè)計時,會先設(shè)計邏輯視圖!比如Controller層,Service層和Model層。如果我新增了一個緩存層用來緩存Model數(shù)據(jù),那么請問這個緩存層是個Layer還是Tier?答案是不一定。如果你使用了redis來緩存數(shù)據(jù),那么緩存層就是個Tier。而如果你直接在系統(tǒng)里寫代碼實現(xiàn),那么就是Layer!

使用場景

CS架構(gòu)風格+分層架構(gòu)風格可以說是個萬金油組合!如果你無法確定該使用哪種架構(gòu)風格的時候,那么可以先使用CS架構(gòu)風格+分層架構(gòu)風格!

上面所提到的對架構(gòu)屬性的影響,也是加成的!即會提高「伸縮性」,「組件復用」,「可移植性」,「可維護性」,但是會更加的影響「性能」!

參考資料

  • 維基百科
  • Azure文檔
  • 《Architectural Styles and the Design of Network-based Software Architectures》Roy Thomas Fielding
  • 《恰如其分的軟件架構(gòu)》

總結(jié)

以上是生活随笔為你收集整理的架构风格:万金油CS与分层的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。