架構究竟是什么?如何更好的理解架構?
我們知道一個App通常是由class組成,而這些class之間如何組合,相互之間又如何產生作用,就是影響這個APP的關鍵點。
細分的話我們可以將其分為類、接口、任務流。
- 類就是組成架構的核心;
- 接口則是這些類之間通訊的路徑、通訊的機制、通訊的期望結果;
- 任務流則是描述系統如何使用類和接口完成某一項需求比如:一次網絡請求。
我們在進行架構設計的時候,通常具有一定的目的性,用一句話來概括就是:架構設計的真正目的是為了解決軟件系統的復雜度帶來的問題,所謂高性能、高可用、高擴展。
我們將其大致可以分為:易擴展、易維護、可定制、可伸縮
- 易擴展:APP 必須能夠在用戶的 UV/PV 數量快速增加的情況下,保持軟件合理的性能。只有這樣在快速從 0 到 1 的需求迭代中才能后顧無憂。
- 易維護:軟件系統的維護包括兩方面,一是修復現有的 bug,二是將新的迭代需求開發到現有系統中去。一個易于維護的系統可以有效地降低人力和物力。
- 可定制:在同一個軟件系統中可能面向的用戶群體是不同的、多樣的,需要滿足根據用戶群的不同和市場需求的不同進行定制化。比如一個 APP 中某些功能只針對特定用戶開放。
- 可伸縮:在新技術出現的時候,一個軟件系統應當允許接入新技術,從而對現有系統進行功能和性能的擴展。
現在我們在進行設計的時候,一般都會有要求高內聚、低耦合,以此來保證APP的高質量
為了方便大家理解,這邊舉個栗子:
低內聚,高耦合:
高內聚,低耦合:
大家覺得誰更好維護?更容易調整?出錯了更容易排查?
我們在架構設計中最本質的目的就是管理復雜度,你聽過的各種思想、原則、方法大多都是為了控制復雜度而設計出來的。
像依賴注入就是項目組件解耦中非常重要的一個手段,Dagger2 和 Hilt 都是在 Android 中最主要的依賴注入框架。
依賴注入其實并不是一個很神秘的概念,往往在不經意間我們就使用了依賴注入。依賴注入應用了IOC控制反轉的原理,簡單來說就是在類的外部構造依賴項,使用構造器或者 setter 注入。
使用依賴注入可以為我們帶來什么好處呢?
- 重用組件: 因為我們在類外部構造依賴項;
- 組件解耦: 當我們需要修改某個組件的實現時,不需要在項目中進行大量變更;
- 易測試: 我們可以向依賴方注入依賴項的模擬實現,這使得依賴方的測試更加容易;
- 生命周期透明: 依賴方不感知依賴項創建 / 銷毀的生命周期,這些可以交給依賴注入框架管理。
我們都知道Dagger是一個早期的依賴注入庫,但確實不好用,需要配置很多東西。雖然它能很好幫我們解耦各個模塊之間的強關聯性,提高項目的健壯性。但其卻以羞澀難懂、難用而聞名,嚇退了很多的開發者。
Hilt是 Dagger2 的二次封裝,Hilt 本質上是對 Dagger 進行場景化。是一個功能強大且用法簡單的依賴注入框架,同時也可以說是近期 Jetpack 家族中最重要的一名新成員。但Hilt涉及的知識點也是相當繁多,即使它將 Dagger2 的用法進行了大幅的簡化,如果你之前對于依賴注入完全沒有了解,直接上手 Hilt 還是會有不少的困難。
在這里問大家幾個問題,看看能不能回答上來:
- 你知道面試官為什么要問你IOC嗎?
- 你知道被問的原理包含哪些嗎?
- 你知道這些原理是如何指導我們代碼實踐開發的嗎?
- 你知道如何從架構層面設計我們的IOC框架解決項目問題?
- 你知道代碼重構中的痛點問題是如何處理的嗎?
說了這么多,那么我們如何學習Hilt,將IOC技術融入進我們的架構設計中呢?
為了幫助大家站在高級工程師的角度,深度理解IOC技術在移動端的實戰應用,同時掌握移動端流行IOC框架Hilt與Dagger2的實戰應用與實現原理。
在這里分享一份由大佬親自收錄整理的學習PDF+架構視頻+面試文檔+源碼筆記,高級架構技術進階腦圖、Android開發面試專題資料,高級進階架構資料
這些都是我現在閑暇時還會反復翻閱的精品資料。里面對近幾年的大廠面試高頻知識點都有詳細的講解。相信可以有效地幫助大家掌握知識、理解原理,幫助大家在未來取得一份不錯的答卷。
當然,你也可以拿去查漏補缺,提升自身的競爭力。
真心希望可以幫助到大家,Android路漫漫,共勉!