chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

常見的軟件架構(gòu)分層

海馬硬件 ? 來源:海馬硬件 ? 作者:海馬硬件 ? 2022-10-13 11:56 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、前言

系統(tǒng)架構(gòu)思想是軟件開發(fā)工程師的工作必備知識。大到大型互聯(lián)網(wǎng)應(yīng)用系統(tǒng)的設(shè)計,小到一個軟件功能函數(shù)的設(shè)計,都需要擁有架構(gòu)設(shè)計思想。軟件架構(gòu)分層就是架構(gòu)設(shè)計中的一個子領(lǐng)域,更著重強調(diào)軟件的分層概念。 本篇文章就帶大家簡單的了解一下軟件架構(gòu)的分層,學習完畢,你就會明白,為什么系統(tǒng)要分層,架構(gòu)分層可以帶來什么好處。

二、軟件架構(gòu)分層的發(fā)展背景

計算機編程在“上古時代”開始時,是用二進制來編程,后面逐漸發(fā)展成熟。到了20 世紀 60 年代第一次軟件危機時,引出了“結(jié)構(gòu)化編程”,并創(chuàng)造了“模塊”概念;20 世紀 80 年代第二次軟件危機引出了“面向?qū)ο缶幊獭?,?chuàng)造了“對象”概念;到了 20 世紀 90 年代, 隨著軟件規(guī)模的不斷增大,以下問題就開始顯現(xiàn)。

系統(tǒng)規(guī)模龐大,內(nèi)部耦合嚴重,開發(fā)效率低;

系統(tǒng)耦合嚴重,牽一發(fā)動全身,后續(xù)修改和擴展困難;

系統(tǒng)邏輯復雜,容易出問題,出問題后很難排查和修復。

于是在Rational 和 Microsoft 內(nèi)部,軟件架構(gòu)的概念開始越來越流行了?!敖M件”概念隨著軟件架構(gòu)的流行也逐漸清晰。 我們可以看到,“模塊”“對象”“組件”本質(zhì)上都是對達到一定規(guī)模的軟件進行拆分,差別只是在于隨著軟件的復雜度不斷增加,拆分的粒度越來越粗,拆分的層次越來越高。 隨著90年代互聯(lián)網(wǎng)的迅速崛起,軟件架構(gòu)分層也隨著軟件架構(gòu)的興起而逐步興起。

三、軟件分層的概念

軟件架構(gòu)分層就是將軟件模塊按照水平切分的方式分成多個層,一個系統(tǒng)由多層組成,每層由多個模塊組成。每層有自己獨立的職責,為上一層提供服務(wù),使用下一層的服務(wù),每層只能看到處自己相臨的層。多個層次協(xié)同提供完整的功能。通過分層結(jié)構(gòu),可以將大的問題分解為若干個漸進的小問題來解決,可以隱蔽問題的復雜度。修改某一層,最多影響其相鄰的兩層(通常只能影響上層)。 這里引申到層間隔離的概念。分層架構(gòu)中的每一層可以是封閉的或者開放的,封閉意味著當一個請求自頂向下在層間傳遞時,它不能跳過任意的一層。所謂的層間隔離,旨在降低一個層次上的變化對其他層次的組件的影響。簡單來說,就是每個層次對其他層次的功能知道的越少越好。但是在某些的場景,將特定的層次置為開放的狀態(tài)也不失為一件好事。還有某些不想被其它層看到的代碼也可以通過層間隔離的手段來實現(xiàn)。

四、軟件分層的特點

分層設(shè)計的本質(zhì)其實就是將復雜問題簡單化,基于單一職責原則讓每層代碼各司其職,基于“高內(nèi)聚,低耦合”的設(shè)計思想實現(xiàn)相關(guān)層對象之間的交互。從而,提升代碼的可維護性和可擴展性。系統(tǒng)架構(gòu)分層之后,一般要具有以下特點:

高內(nèi)聚:分層設(shè)計可以簡化系統(tǒng)設(shè)計,讓不同層專注做本層相關(guān)的事,同時更利于系統(tǒng)開發(fā)工作的分配,讓“專業(yè)的人做專業(yè)的事”。這也體現(xiàn)了軟件設(shè)計思想的“單一職責原則”;

低耦合:層與層之間通過接口或API來交互,依賴方不用知道被依賴方的細節(jié)。這樣即使某一層發(fā)生較大的變化,其它層也不需要做較多改動就可以適配。軟件設(shè)計思想的“迪米特法則”在這里得到了體現(xiàn);

復用/可移植性:分層之后可以做到代碼或功能的復用;

擴展性/易裁剪:分層架構(gòu)可以讓代碼更容易橫向擴展或者裁剪。這里體現(xiàn)了軟件設(shè)計思想的開閉原則”。

任何事物都不可能是盡善盡美的,分層架構(gòu)雖有優(yōu)勢也會有缺陷,比如分層可能會增加代碼量。通過層層調(diào)用會降低了代碼效率。 下面列用幾種常見的分層架構(gòu)來說明以上作用。

五、常見的分層架構(gòu)

TCP/IP協(xié)議的四層架構(gòu):它把網(wǎng)絡(luò)簡化成了四層,即鏈路層、網(wǎng)絡(luò)層、傳輸層和應(yīng)用層。每一層各司其職又互相幫助,網(wǎng)絡(luò)層負責端到端的尋址和建立連接,傳輸層負責端到端的數(shù)據(jù)傳輸?shù)?,同時相鄰兩層還會有數(shù)據(jù)的交互。這樣可以隔離關(guān)注點,讓不同的層專注做不同的事情。

e8e91490-4a13-11ed-a3b6-dac502259ad0.png

Linux文件系統(tǒng)分層:從下圖你可以清晰地看出文件系統(tǒng)的層次。在文件系統(tǒng)的最上層是虛擬文件系統(tǒng)(VFS),用來屏蔽不同的文件系統(tǒng)之間的差異,提供統(tǒng)一的系統(tǒng)調(diào)用接口。虛擬文件系統(tǒng)的下層是 Ext3、Ext4 等各種文件系統(tǒng),再向下是為了屏蔽不同硬件設(shè)備的實現(xiàn)細節(jié),我們抽象出來的單獨的一層——通用塊設(shè)備層,然后就是不同類型的磁盤了。

e9854e50-4a13-11ed-a3b6-dac502259ad0.png

我們可以看到,某些層次負責的是對下層不同實現(xiàn)的抽象,從而對上層屏蔽實現(xiàn)細節(jié)。比方說VFS 對上層(系統(tǒng)調(diào)用層)來說提供了統(tǒng)一的調(diào)用接口,同時對下層中不同的文件系統(tǒng)規(guī)約了實現(xiàn)模型,當新增一種文件系統(tǒng)實現(xiàn)的時候,只需要按照這種模型來設(shè)計,就可以無縫插入到 Linux 文件系統(tǒng)中。

網(wǎng)絡(luò)服務(wù)架構(gòu)分層:下圖是目前常見的網(wǎng)絡(luò)服務(wù)架構(gòu),分為部署的硬件環(huán)境、操作系統(tǒng)、所需的中間件、承載業(yè)務(wù)的應(yīng)用程序以及軟件接入層等。不同的層次也產(chǎn)生了對應(yīng)在職位,比如運維工程師、中間件工程師、產(chǎn)品經(jīng)理、開發(fā)工程師、測試工程師等工種。而我們在實踐過程中,接觸最多,使用最多的分層要屬應(yīng)用軟件層了,其次是中間件層。

e9fc156c-4a13-11ed-a3b6-dac502259ad0.png

嵌入式軟件架構(gòu)分層:嵌入式系統(tǒng)中,軟件的分層同樣很重要。嵌入式系統(tǒng)中的核心是芯片,以及圍繞著芯片展開的一系列硬件電路,但是不同的嵌入式項目之間硬件差異很大,為了讓硬件能夠按指定的方式工作,就需要為相應(yīng)的硬件“量身定制”硬件層代碼。雖然硬件之間有差異,但還是存在一些共同點,比如驅(qū)動LCD工作,外接幾個IO口來支持按鍵或控制小燈的開關(guān)等功能。為了屏蔽硬件底層的差異,同時提供統(tǒng)一的功能硬件接口,于是硬件抽象層就產(chǎn)生了。業(yè)務(wù)代碼則實現(xiàn)嵌入式系統(tǒng)指定的業(yè)務(wù)功能,定義了系統(tǒng)在什么條件下做什么反應(yīng),或者定期執(zhí)行一些什么動作。為了讓業(yè)務(wù)代碼開發(fā)更方便,不重復“造輪子”,需要收集很多現(xiàn)成的“輪子”,比較典型的“輪子”就是操作系統(tǒng),它是眾多“輪子”的集合,給應(yīng)用程序提供了多任務(wù),中斷,任務(wù)間通信等功能,這一層我姑且叫它“功能層”。

ea80624a-4a13-11ed-a3b6-dac502259ad0.png

六、怎么分

在做架構(gòu)分層時,開發(fā)團隊需要做到以下幾點:

1. 讓團隊深入理解軟件分層的義意,清晰軟件分層的目的

分層的作用在上面已經(jīng)列出來,只有充分認識到軟件分層帶來的好處,才會有動力去設(shè)計與實現(xiàn)分層。

2. 合理設(shè)計分層,清晰定義每層的職責

基于“高內(nèi)聚,低耦合”的設(shè)計思想,定義每層的職責,每層再設(shè)計不同的模塊。層次數(shù)量可以根據(jù)實際需要來調(diào)整。建議最多不要超過7層,3到4層最佳。

3.避免掉進sinkhole反模式的陷阱

所謂sinkhole反模式指的是請求只是簡單地路過各個層次,并沒有做一些業(yè)務(wù)處理。 比如,表現(xiàn)層接收到一個獲取基本用戶數(shù)據(jù)(姓名、地址等)的請求后將它傳遞到業(yè)務(wù)層;然而,業(yè)務(wù)層并沒有做任何的業(yè)務(wù)處理,直接將請求傳遞到持久層;持久層也僅僅是構(gòu)造了一個簡單的SQL語句,向數(shù)據(jù)層查詢用戶數(shù)據(jù);最后,數(shù)據(jù)按照原路返回到表現(xiàn)層,中途沒有經(jīng)過任何的數(shù)據(jù)匯聚、轉(zhuǎn)換等操作。sinkhole反模式會導致很多不必要的對象實例化開銷,從而增大了系統(tǒng)的內(nèi)存消耗,并且影響了性能。 利用80-20原則可以幫助確定架構(gòu)是否陷入sinkhole反模式。大概有百分之二十的請求僅僅是做簡單的穿透,百分之八十的請求會做一些業(yè)務(wù)邏輯操作是正常的情況。然而,如果這個比例反過來,大部分的請求都是僅僅穿過層,不做邏輯操作,架構(gòu)就陷入了sinkhole反模式,可以對一些架構(gòu)層進行開放或者減少層級關(guān)系。

4. 通過技術(shù)手段守護架構(gòu)

當定義清楚了分層架構(gòu),必然也要有守護架構(gòu)的一些原則,在《演進式架構(gòu)》中推薦盡早確定系統(tǒng)的適應(yīng)度函數(shù),并定期的審查,根據(jù)業(yè)務(wù)和技術(shù)的需求修改當前的適應(yīng)度函數(shù)或增加新的適應(yīng)度函數(shù),以保證架構(gòu)能夠按照設(shè)計的方向發(fā)展。 在java進程內(nèi),有一些自動化工具可以通過測試的方式來驗證代碼的架構(gòu)是否遵循了預先設(shè)計的原則(如ArchUnit),可以高效的幫團隊識別出在開發(fā)過程中破壞原則的代碼實現(xiàn)。

5.提升團隊整體認知水平和協(xié)作水平

在團隊不斷成熟的過程中,很難保證所有的開發(fā)人員都能夠有能力守護架構(gòu),因此除了通過技術(shù)手段守護架構(gòu),也非常有必要采取一定的手段來提升整個團隊的認知水平和協(xié)作水平。 首先可以在團隊內(nèi)建立架構(gòu)評審委員會,關(guān)于架構(gòu)的關(guān)鍵決策需要由委員會來拍板,而不是每個開發(fā)人員都可以決策。另外在做詳細的實現(xiàn)設(shè)計時,要由有經(jīng)驗有能力守護架構(gòu)的同學進行設(shè)計,并將工作內(nèi)容拆分成更加可操作的Task。通過這種方式將整個團隊的認知水平底線提升到可以守護架構(gòu)的程度。 上面分享了分層的特點和分層的方法,相信你已經(jīng)對軟件架構(gòu)分層有了更深入的了解。希望軟件架構(gòu)分層可以融入到我們的開發(fā)設(shè)計工作中。

七、結(jié)語

本篇文章為大家分享了市面上常見的架構(gòu)分層。架構(gòu)分層的目的是通過關(guān)注點分離來降低系統(tǒng)的復雜度,同時滿足單一職責、高內(nèi)聚、低耦合、提高可復用性和降低維護成本。但分層架構(gòu)同樣也有一定的缺點,比如開發(fā)成本高、性能略低等問題。實踐中,架構(gòu)分層并不能解決所有問題,每個項目可能都有其獨特的需求和背景,選擇什么樣的架構(gòu)模式,還是要根據(jù)實情況考慮。

審核編輯:彭靜
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    7314

    瀏覽量

    93918
  • 計算機
    +關(guān)注

    關(guān)注

    19

    文章

    7762

    瀏覽量

    92653
  • 軟件
    +關(guān)注

    關(guān)注

    69

    文章

    5295

    瀏覽量

    90819
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4405

    瀏覽量

    66795

原文標題:軟件架構(gòu)分層-你的軟件有沒有分層?

文章出處:【微信號:海馬硬件,微信公眾號:海馬硬件】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    嵌入式軟件分層架構(gòu)設(shè)計原則

    嵌入式軟件分層架構(gòu)的設(shè)計原則如下: 模塊化和可擴展性:每一層應(yīng)當保持松耦合,這樣當硬件變化或某些功能擴展時,只需要修改對應(yīng)的層次,而不影響整體架構(gòu)。 硬件無關(guān)性:上層代碼應(yīng)當盡量避免直
    發(fā)表于 11-28 07:05

    AUTOSAR分層架構(gòu)

    AUTOSAR分層架構(gòu)
    發(fā)表于 09-26 11:12

    嵌入式分層架構(gòu)的相關(guān)資料分享

    最近重新進入嵌入式領(lǐng)域,有必要對嵌入式分層架構(gòu)有一個清晰的理解。經(jīng)過多方查閱以及個人的理解,本人對嵌入式分層架構(gòu)概括總結(jié)如下:比較細的層次由下到上可分為:(硬件層)硬件底層->硬件驅(qū)動
    發(fā)表于 10-28 08:42

    基于mcu的一種分層軟件架構(gòu)的相關(guān)資料分享

    基于mcu的一種分層軟件架構(gòu)(一)1、寫在前面先來個圖:經(jīng)過了一段時間的琢磨與思考。借鑒操作系統(tǒng)的分層原理,也搞出來了一種mcu的層狀軟件結(jié)
    發(fā)表于 11-03 06:46

    談?wù)凪C9S12G128模塊的軟件分層架構(gòu)

    內(nèi)容修改歷史.. 2內(nèi)容.. 31 overview. 41.1 目的.. 42 軟件分層架構(gòu).. 52.1 driver層.. 52.2 中間件層.. 63 port資源.. 73.1 數(shù)據(jù)方向
    發(fā)表于 12-10 06:09

    軟件架構(gòu)設(shè)計之常用架構(gòu)模式

    分層架構(gòu)分層架構(gòu)是使用最多的架構(gòu)模式,通過分層使各個層的職責更加明確,通過定義的接口使各層之間
    發(fā)表于 06-22 18:35 ?4611次閱讀

    軟件架構(gòu)設(shè)計之常用架構(gòu)模式介紹

    使用n層的服務(wù)。而一般意義的分層是上層能夠使用它下邊所有層的服務(wù)。領(lǐng)域驅(qū)動設(shè)計的分層定義:UI層,UI控制層,服務(wù)層,領(lǐng)域?qū)?,基礎(chǔ)設(shè)施層。 2.MVC架構(gòu):MVC架構(gòu)相信做
    發(fā)表于 12-01 11:59 ?514次閱讀

    什么是分層架構(gòu)的依據(jù)與原則?本文告訴你答案!

    分層架構(gòu)是運用最為廣泛的架構(gòu)模式,幾乎每個軟件系統(tǒng)都需要通過層(Layer)來隔離不同的關(guān)注點(Concern Point),以此應(yīng)對不同需求的變化,使得這種變化可以獨立進行;此外,
    發(fā)表于 07-27 14:16 ?7970次閱讀
    什么是<b class='flag-5'>分層</b><b class='flag-5'>架構(gòu)</b>的依據(jù)與原則?本文告訴你答案!

    基于mcu的一種分層軟件架構(gòu)

    基于mcu的一種分層軟件架構(gòu)(一)1、寫在前面先來個圖:經(jīng)過了一段時間的琢磨與思考。借鑒操作系統(tǒng)的分層原理,也搞出來了一種mcu的層狀軟件結(jié)
    發(fā)表于 10-28 09:51 ?13次下載
    基于mcu的一種<b class='flag-5'>分層</b><b class='flag-5'>軟件</b><b class='flag-5'>架構(gòu)</b>

    MC9S12G128模塊化分層軟件架構(gòu)之七_外部中斷

    MC9S12G128模塊化分層軟件架構(gòu)之七_外部中斷
    發(fā)表于 12-05 09:06 ?9次下載
    MC9S12G128模塊化<b class='flag-5'>分層</b>化<b class='flag-5'>軟件</b><b class='flag-5'>架構(gòu)</b>之七_外部中斷

    AUTOSAR分層架構(gòu)介紹及SmartSAR studio使用總結(jié)

    AUTOSAR分層架構(gòu)
    發(fā)表于 03-28 16:44 ?11次下載

    分層單體架構(gòu)系統(tǒng)的風格及其本質(zhì)

    分層單體架構(gòu)風格是分層思想在單體架構(gòu)中的應(yīng)用,其關(guān)注于技術(shù)視角的職責分層
    的頭像 發(fā)表于 01-16 15:31 ?2209次閱讀

    分層架構(gòu)到微服務(wù)架構(gòu)介紹(一)

    )。它們分別從微觀和宏觀的角度指導著我們設(shè)計出良好的軟件系統(tǒng),因此,作為一個軟件工程師,我們不僅要熟悉設(shè)計模式,對常見架構(gòu)模式也要熟稔于心。正如看到一個設(shè)計模式的名字腦里就能浮現(xiàn)出大
    的頭像 發(fā)表于 05-10 16:55 ?1789次閱讀
    從<b class='flag-5'>分層</b><b class='flag-5'>架構(gòu)</b>到微服務(wù)<b class='flag-5'>架構(gòu)</b>介紹(一)

    嵌入式軟件常見架構(gòu)模式

    嵌入式軟件因為硬件資源限制,可能存在驅(qū)動與應(yīng)用耦合的情況,但對于大型項目,資源充裕的情況下,復雜的業(yè)務(wù)邏輯、后續(xù)擴展維護的需要,必須采用分層和模塊化思維,這種思想就是架構(gòu)模式。一般分7種架構(gòu)
    的頭像 發(fā)表于 06-22 10:32 ?3495次閱讀
    嵌入式<b class='flag-5'>軟件</b>最<b class='flag-5'>常見</b>的<b class='flag-5'>架構(gòu)</b>模式

    架構(gòu)與設(shè)計 常見微服務(wù)分層架構(gòu)的區(qū)別和落地實踐

    架構(gòu)風格越傾向于清晰的職責定位,且讓領(lǐng)域模型成為架構(gòu)的核心。 基于這些架構(gòu)風格,在軟件架構(gòu)設(shè)計過程中又有非常多的
    的頭像 發(fā)表于 10-22 15:34 ?960次閱讀
    <b class='flag-5'>架構(gòu)</b>與設(shè)計 <b class='flag-5'>常見</b>微服務(wù)<b class='flag-5'>分層</b><b class='flag-5'>架構(gòu)</b>的區(qū)別和落地實踐