為什么系統要分層如何知曉公司系統中采用的是什么分層架構

只要從事軟件開發的工作,系統架構是必備知識 。有朋友說可能會說,我只是一個搬磚的,怎么會接觸到架構知識呢?其實,除了架構的設計者(也就是架構師) , 作為普通的開發者也是在時刻踐行著系統架構的理論 。畢竟,再好的架構 , 都需要碼農去實施 。只不過當你沒有系統了解軟件架構時,可能感知不到而已 。
本篇文章就帶大家系統的了解一下軟件架構的分層,學習完畢,你就會明白 , 為什么系統要分層 。同時,也能準確地看清楚目前自己系統中采用的是什么樣的分層架構 。
不采用架構分層,行不行?首先我們來思考一個問題,如果一個系統不采用分層架構可不可以?這個問題就好像在問,代碼中不使用設計模式行不行?答案當然是可以的 。但不采用架構分層 , 會帶來極大的未知風險,或者說代碼極具熵增的特性 。
作為一個初創軟件,可能沒有什么業務邏輯,沒有什么用戶量,而軟件最主要的目標就是快速上線,實踐商業模式 。此時,可以不考慮分層 。但隨著業務邏輯的復雜,業務板塊的增多 , 彼此之間就會出現錯綜復雜的依賴關系,隨之就會產生的邏輯不清晰、可讀性差,維護困難,改動一處動全身等問題 。
什么是架構分層?分層架構是將軟件模塊按照水平切分的方式分成多個層,一個系統由多層組成 , 每層由多個模塊組成 。同時,每層有自己獨立的職責,多個層次協同提供完整的功能 。比如,我們經常提到的MVC架構,就是一種非常典型非?;A的分層方式 。
分層設計的本質其實就是將復雜問題簡單化 , 基于單一職責原則讓每層代碼各司其職,基于“高內聚,低耦合”的設計思想實現相關層對象之間的交互 。從而 , 提升代碼的可維護性和可擴展性 。
系統架構分層之后,往往需要達到以下目標:
高內聚:分層設計可以簡化系統設計,讓不同層專注做某一模塊的事;低耦合:層與層之間通過接口或API來交互 , 依賴方不用知道被依賴方的細節;復用:分層之后可以做到代碼或功能的復用;擴展性:分層架構可以讓代碼更容易橫向擴展通訊領域的OSI參考模型在計算機領域現有最典型的分層架構設計就是OSI參考模型和TCP/IP參考模型了 。關于這個模型,我們在《 一篇文章,只用看三遍 , 終生不忘網絡分層! 》一文中已經詳細介紹了 。下面直接看一下相關的模型圖:

為什么系統要分層如何知曉公司系統中采用的是什么分層架構

文章插圖
對于上述的三種分層模式,試想一下 , 如果沒有分層,當一個業務或協議需要改變時,我們只能針對整個系統做修改或擴展 。而分層之后,便可以很方便地把不同功能的模塊抽離出來,修改對應的模塊即可 。而且不同層還可以被復用,只要確保按照這個層的協議來處理就可以了 。
軟件系統整體分層以Java軟件應用為例,整個軟件系統也可進行分層,比如分為部署的硬件環境、操作系統、所需的中間件、承載業務的應用程序以及軟件接入層 。可通過下圖進行整體了解:
為什么系統要分層如何知曉公司系統中采用的是什么分層架構

文章插圖
對于上述分層也產生了對應在職位 , 比如運維工程師、中間件工程師、產品經理、開發工程師、測試工程師等工種 。而我們在實踐過程中,接觸最多 , 使用最多的分層要屬應用軟件層了,其次是中間件層 。
下面我們就來看看針對應用軟件層通常有哪些分層方式 。
經典三層架構三層架構(3-tier application) ,通常就是將整個業務應用劃分為:表現層(UI)、業務邏輯層(BLL)、數據訪問層(DAL) 。