前端架構入門


 

常見的架構風格

分層風格

這是最常見的架構風格,它將系統按照水平切分的方式分成多個層。一個系統由多層組成,每層由多個模塊組成。每一層為上層提供服務,並使用下層提供的功能。最為人所知的分層架構應用是OSI七層模型和TCP/IP五層模型,在開發后端服務的時候得到了廣泛的應用。如在采用Spring MVC開發的后端應用中,Controller層在接收后端請求時,將通過Service層向DAO(Data Access Object,數據訪問對象)層請求數據,而不是直接向DAO層請求數據。

MVC架構

 這種風格應用得相當廣泛,它強調職責分離,將軟件系統分為三個基本部分:模型(Model)、視圖(View)和控制器(Controller)。由視圖和控制器一起完成用戶界面的功能,並設計一套變更機制,來保證用戶界面與模型的一致性。它是一種常見的架構風格,在涉及圖形用戶界面時,往往都有它的身影,如前端應用、移動端應用等。

發布-訂閱風格

這種風格又可以稱為基於事件的架構風格,它是一種一對多的關系,一個對象狀態發生改變時,所有訂閱它的對象都會得到通知。這種架構風格帶來的最大好處是,代碼上的解耦。發布者不關心事件的訂閱者,只需要在適當的時候發布相應的事件即可;而訂閱者則依賴於事件,而非事件的發布者。在前端的日常開發中,為了解耦不同的UI組件的依賴,會經常采用這種模式。

管理和過濾器

這是一種適合於處理數據流的架構模式,它將每個步驟都封裝在一個過濾器組件中,數據通過相鄰過濾器之間的管道傳輸。最典型的管道-過濾器架構是UNIX shell的設計。在類Unix系統中,使用“|”作為管理符號,當我們需要編寫復雜的Shell腳本來處理內容時,便會使用這個符號。諸如ls-l|grep.jpg,便會先執行ls-l命令,再將結果交由grep程序,查找以.jpg結尾的文件名。

它也適用於相關的數據處理場景,如我們在采用Hadoop、Spark等編寫數據處理相關的代碼時,便會采用這種模式來編寫。如前端框架的Angular,也直接內置了管理(Pipe)系統。

架構設計方法

RUP 4 +1 視圖法

邏輯視圖(Logical View)

在設計期的模塊、接口划分、職責及協作方式等。

流程視圖(Process View)

在運行期運行的數據同步,如在微前端中的數據流、控制流等。

開發視圖(Development View)

在開發期的框架、庫、技術選型及其對應的編譯。

物理視圖(Physical View)

又稱為部署視圖。在部署期與持續交付相關的技術決策

場景(scenarios)

又稱為例視圖,它使用一組用例或場景來說明架構

架構設計原則

不多也不少

不做多余的設計,也不缺少關鍵部分

演進式

不斷地演進以使架構適應當前的環境

持續性

長期的架構改進比什么都重要

前端架構設計:層次設計

架構設計本身是分層級的,面向不同級別的人時所展示的內容也是不一樣的,不同階段構成架構的因素是不同的,基於這個思路,架構設計可以分為四個層級。

 

相應的層級解釋如下:

◎ 系統級,即應用在整個系統內的關系,如與后台服務如何通信,與第三方系統如何集成。

◎ 應用級,即應用外部的整體架構,如多個應用之間如何共享組件、如何通信等。

◎ 模塊級,即應用內部的模塊架構,如代碼的模塊化、數據和狀態的管理等。

◎ 代碼級,即從基礎設施來保障架構實施。

在設計的時候,既要用自上而下的方式來設計架構,又要用自下而上的方式來完善架構。從演進式設計的角度來看,我們需要在前期設計的時候,對所有系統級架構及部分應用級架構進行技術決策,而其余部分的架構則可以在實施的過程中考慮。

微前端的技術拆分方式

從技術實踐上,微前端架構可以采用以下幾種方式進行:

(1)路由分發式。

通過HTTP服務器的反向代理功能,將請求路由到對應的應用上。

在這個架構中,我們只需要關注應用間的數據傳遞方式。通常,我們只需要將當前的用戶狀態,從A應用傳遞到B應用即可。

(2)前端微服務化。

在不同的框架之上設計通信和加載機制,以在一個頁面內加載對應的應用。

前端微服務化,是微服務架構在前端的實施,每個前端應用都是完全獨立(技術棧、開發、部署、構建獨立)、自主運行的,最后通過模塊化的方式組合出完整的前端應用。

采用這種方式意味着,一個頁面上同時存在兩個及以上的前端應用在運行。而路由分發式方案則是,一個頁面只有唯一一個應用。

同時,我們還需要保證應用間的第三方依賴不沖突。如應用A中使用了z插件,而應用B中也使用了z插件,如果一個頁面多次引入z插件會發生沖突,那么我們應該嘗試去解決這樣的問題

(3)微應用。

通過軟件工程的方式,在部署構建環境中,把多個獨立的應用組合成一個單體應用。

微應用化是指,在開發時應用都是以單一、微小應用的形式存在的,而在運行時,則通過構建系統合並這些應用,並組合成一個新的應用。

微應用化與前端微服務化類似,在開發時都是獨立應用的,在構建時又可以按照需求單獨加載。如果以微前端的單獨開發、單獨部署、運行時聚合的基本思想來看,微應用化就是微前端的一種實踐,只是使用微應用化意味着我們只能使用唯一的一種前端框架。

(4)微件化。

開發一個新的構建系統,將部分業務功能構建成一個獨立的chunk代碼,使用時只需要遠程加載即可。

(5)前端容器化。

將iframe作為容器來容納其他前端應用。

(6)應用組件化。

借助於WebComponents技術,來構建跨框架的前端應用。

實施的方式雖然多,但都是依據場景而采用的。在有些場景下,可能沒有合適的方式;在有些場景下,則可以同時使用多種方案。

微前端的業務划分方式

與微服務類似,要划分不同的前端邊界不是一件容易的事。就當前而言,以下幾種方式是常見的划分微前端的方式:

◎ 按照業務拆分。

◎ 按照權限拆分。

◎ 按照變更的頻率拆分。

◎ 按照組織結構拆分。

◎ 跟隨后端微服務划分。

因為每個項目都有自己特殊的背景,所以切分微前端的方式就不一樣。即使項目的類型相似,也存在一些細微的差異。

 

待續。。。

 

《前端架構:從入門到微前端》 

 

@萍2櫻釋ღ( ´・ᴗ・` )


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM