走進Android架構,體會架構師的魅力(附架構師必備技術詳解)
- 2019 年 10 月 8 日
- 筆記
有關android架構方面的知識少之又少,而對與架構的理解有關架構的文章也都是智者見智仁者見仁。在我身邊聽到最多的話就是架構=What?、架構=框架、架構=設計模式、架構=MVP/MVVM。那麼架構到底是什麼那?架構又有何用處?它在android中又能給你帶來意想不到的效果? 希望有興趣的能和各位討論討論。
二、理解架構
全球有名的架構目前分為四種:
1、Clean架構:一種分層的架構方式,將核心業務(對應domain層)、UI相關(對應presenter層)以及數據載入(對應data層)彼此獨立開來,不同的層之間由介面依次連接起來,但卻又彼此不了解彼此的具體實現。

2、DCI架構:DCI是數據Data 場景Context 交互Interactions的簡稱,DCI是一種特別關注行為的模式(可以對應GoF行為模式)。DCI架構真正含義可以歸結如下:
- 1.數據data:是領域對象中代表領域類概念的那部分。
- 2.場景context:根據運行時即時調用,將活的對象實例帶到符合用例需求的場景中
- 3.交互interactions, 描述需求用戶心目中角色的活動演算法。

3、DDD領域驅動設計:2004年著名建模專家Eric Evans發表了他最具影響力的著名書籍:Domain-Driven Design –Tackling Complexity in the Heart of Software(中文譯名:領域驅動設計 2006年3月清華出版社譯本,或稱 Domain Driven-Design architecture [Evans DDD])。軟體的產生過程是:分析、設計、編程、測試、部署。過去,分析領域和軟體設計是分裂的,分析人員從領域中收集基本概念;而設計必須指明一組能在項目中適應編程工具構造的組件,這些組件必須能夠在目標環境中有效執行,並能夠正確解決應用程式出現的問題。模型設計設計(Model-Driven Design)拋棄了分裂分析模型與設計的做法,使用單一的模型來滿足這兩方面的要求。這就是領域模型。

4、六邊形架構架構:六邊形架構(Hexagonal Architecture),又稱為埠和適配器架構風格,其中的「六」具體數字沒有特殊的含義,僅僅表示一個「量級」的意思,六邊形的定義只是方便更加形象的理解。我們知道分層架構的重要作用就是避免耦合的出現,經典分層架構和六邊形架構都是分層架構的一種,但是所發揮的作用會有些不同,經典分層架構更多的精力放在抽象的分離上,每個層的職責分的很明確,各個層的依賴關係更加抽象化,從而避免耦合的出現,而在六邊形架構中,是用「組件化」的形式來避免耦合的出現,每個業務單元儘可能的最小化,然後把這些業務組件集合起來,用一個鎚子把他們都拍扁,所以,在整個集合中,這些小的業務單元都是「平等的」,這種方式用一個詞來概括,那就是「扁平化」。

三、設計模式
設計模式(Design Pattern)是一套被反覆使用、多數人知曉的、經過分類的、程式碼設計經驗的總結。使用設計模式的目的:為了程式碼可重用性、讓程式碼更容易被他人理解、保證程式碼可靠性。 設計模式使程式碼編寫真正工程化;設計模式是軟體工程的基石脈絡,如同大廈的結構一樣。
1、設計模式的重要性:
- 設計模式是高級軟體工程師和架構師面試基本必問的項目(先通過面試進入這個門檻我們再談其它)
- 設計模式是經過大量實踐檢驗的安全高效可復用的解決方案。不要重複發明輪子,而且大多數時候你發明的輪子還沒有已有的好
- 設計模式是被主流工程師/架構師所廣泛接受和使用的,你使用它,方便與別人溝通,也方便別人code review(這個夠實在吧)
- 使用設計模式可以幫你快速解決80%的程式碼設計問題,從而讓你更專註於業務本身
- 設計模式本身是對幾大特性的利用和對幾大設計原則的踐行,程式碼量積累到一定程度,你會發現你已經或多或少的在使用某些設計模式了
- 架構師或者team leader教授初級工程師設計模式,可以很方便的以大家認可以方式提高初級工程師的程式碼設計水平,從而有利於提高團隊工程實力
四、程式碼形式
- 這樣子解釋架構、設計模式應該能讓你更加了解它:
- 我現在要蓋一棟房子(需求),房子當然要蓋得漂亮大方美觀一點去把全國最有名的設師Jack叫過來把我的房子先設計出來讓我看一看(架構師),恩Jack果然是老司機設計的我很滿意不過這個房子的左邊不要蓋出來要留出來一部分讓我以後的孩子來用,還有右上角要多加個走廊還有房子的院前要留出啦一部分當花園,針對這麼多需要更變Jack爽快的答應了,一點也不苦惱因為Jack早就想到會變更偷偷運用了自己總結了一生的方案(設計模式)。好了搬磚的搬磚、砌牆的砌牆、工人們依靠Jack給出的設計愉快的蓋著房子(程式設計師)。
Github:github.com/blindmonk/A…
架構師不是天生的,是在項目中磨練起來的,所以,我們學了技術就需要結合項目進行實戰訓練,那麼在Android裡面最常用的架構無外乎 MVC,MVP,MVVM,但是這些思想如果和模組化,層次化,組件化混和在一起,那就不是一件那麼簡單的事了,我們需要一個真正身經百戰的架構師才能講解透徹其中蘊含的深理。
那麼成為架構師需要必備哪些技術呢?
希望以下的學習路線能對你有幫助
一、原生UI設計
隨著互聯網+時代的日趨成熟,移動互聯網產品的普及和發展也日趨成熟和多樣化,但只有不斷滿足用戶體驗的設計師才能牢牢鎖住用戶的需求。近年來隨著互聯網和IT行業的迅猛發展,如今IT行業的程式設計師和UI設計師需求非常旺盛,可以說從事UI工程師行業的職業前景非常光明。

二、性能調優及優化工具運用
一個app的性能好不好我們需要從兩個層面努力。第一個層面:書寫高性能程式碼;第二個層面:調優。 如何寫出高性能的程式碼呢? 那就需要我們具備深厚的程式碼功底,這就是程式碼的基礎。另外,對常用的演算法有自己獨到的見解,leetcode上有刷個上百道題,這樣差不多可以達到精通最常用的排序查找動態規劃等演算法的能力。再者,高效的演算法以及節省記憶體的數據結構如果配合優秀的符合應用場景的設計模式,那麼,這些就為高性能的程式碼提供了實現依據。 另外一個就是對寫好的程式碼進行調優,那麼調優的方向就是使用Profiler工具進行測試和檢查,看哪裡有性能消耗大的操作,然後分析對於程式碼的問題。調優的方向就變成了如何對記憶體調優,對耗電調優,對網路流量調優,當然,還有對啟動速度,頁面切換效果與速度,開機白屏體驗,閃屏方面的原因等進行分析和調優。最後再加上一個螢幕適配相機適配。

三、 Android前沿技術(架構師必備)
現在去很多公司面試,除了你具備基本的能夠寫一個高性能app的能力後,一般都會在自己的app裡面加一些現有的相對較 6的技術,這些技術我們稱之為前沿技術。他們一般包含熱升級,熱修復,App Instant,強制更新,組件化路由架構Arouter,RxJava,IOC架構方法,Hook技術等等,當然,這些技術你不能只會用,你需要知道他的原理,有時候,你還需要知道如何對這些架構進行改進。

四、人工智慧(底層架構師必備)
音影片/高清大圖片/人工智慧/直播/抖音等等這年與用戶最緊密,與我們生活最相關的技術一直都在尋找最終的技術落地平台,以前是windows系統,而現在則是移動系統了,移動系統中又是以Android佔比絕大部分為前提,所以Android NDK技術已經是我們必備技能了。要學習好NDK,其中的關於C/C++,jni,Linux基礎都是需要學習的,除此之外,音影片的編解碼技術,流媒體協議,ffmpeg這些都是音影片開發必備技能,而且OpenCV/OpenGl/ 這些又是影像處理必備知識,這些都在我們課程裡面有原理級的實戰項目。

五、 混合開發
混合開發的flutter現在已經逐漸變成了主流的混合開發框架,另外由於阿里系的強大存在,導致阿里 系的公司都在用Weex混合架構,這些都是一個Android工程師開拓視野,走向未來必不可少的基本技能
