首先我們想想為什麼需要「明確的」前端架構?很多時候我們都是希望快速應付使用者或客戶需求,在先求有再求好的心態下,草草開發上線,這樣的做法看似成本很低廉,但是這些作為,卻讓我們在後續的維護、修復和功能擴充上吃足苦頭,付出高昂的代價,無法騰出更多時間去做其他更有價值的事。
在參考很多文章和框架後,歸納出幾點要注意的:
- 首先,我們希望以後的系統能易於維護,也易於擴充
- 其次,我們希望很多可以元件或工具可以重複使用
- 最後,我們得注意執行效能,建置時只導入你需要的套件,runtime時只載入你需要的功能
- 水平分割:類似於MVC這樣的概念,希望每個面向各司其職。
┃Presentation Layer:專注於使用者互動(UI/UX)┃Business Layer:系統的業務邏輯應用領域┃Resource Layer:數據資料流
- 垂直分割:把應用程序中的相同功能或子系統相關的功能放在一起,希望能更易於後續維護。
┃Module A┃Module B┃Module C ...
譬如ModuleA負責病患掛號作業,Module B負責醫師看診作業,ModuleC負責藥劑作業等
接著動手Angular專案建置未來的開發架構,並嘗試把架構畫下來,並做說明。
可以看到App module中包含了core module、shared module和更多的project modules,這樣的概念如同上述的垂直切割,我將分別說明其功用。
- core module:整個架構裡底層的工具,譬如Http發送request 和response,攔劫用的interceptor加工等
- shared module:存放共享的工具,如組件、服務、指令等
- project module:可能是一個子系統或功能,需要import core module和shared module,在project 跟project 之間應該要彼此獨立。
- views:主要進行ui/ux的設計
- services:業務邏輯、資料處理
- models:定義資料架構、類別
|—–app
|—–core module
—–core_module.ts
|—–shared module
|—–services
|—–views
|—–models
|—–pipes
|—–directives
—–shared.module.ts
|—–project1 module
|—–services
|—–views
|—–models
|—–pipes
|—–directives
—–project1.module.ts
—–project1-routing.ts
|—–project2 module
|—–services
|—–views
|—–models
|—–pipes
|—–directives
—–project1.module.ts
—–project1-routing.ts
—–app.component.html
—–app.component.css
—–app.component.ts
—–app.modules.ts
—–app-routing.module.ts