有關android架構方面的知識少之又少,而對與架構的理解有關架構的文章也都是智者見智仁者見仁。在我身邊聽到最多的話就是架構=What?、架構=框架、架構=設計模式、架構=MVP/MVVM。那麼架構究竟是什麼那?架構又有何用處?它在android中又能給你帶來意想不到的效果? 但願有興趣的能和各位討論討論。android
一、Clean架構:一種分層的架構方式,將核心業務(對應domain層)、UI相關(對應presenter層)以及數據加載(對應data層)彼此獨立開來,不一樣的層之間由接口依次鏈接起來,但卻又彼此不瞭解彼此的具體實現。程序員
二、DCI架構:DCI是數據Data 場景Context 交互Interactions的簡稱,DCI是一種特別關注行爲的模式(能夠對應GoF行爲模式)。DCI架構真正含義能夠歸結以下:面試
1.數據data:是領域對象中表明領域類概念的那部分。算法
2.場景context:根據運行時即時調用,將活的對象實例帶到符合用例需求的場景中編程
3.交互interactions, 描述需求用戶心目中角色的活動算法。設計模式
三、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)拋棄了分裂分析模型與設計的作法,使用單一的模型來知足這兩方面的要求。這就是領域模型。安全
四、六邊形架構架構:六邊形架構(Hexagonal Architecture),又稱爲端口和適配器架構風格,其中的「六」具體數字沒有特殊的含義,僅僅表示一個「量級」的意思,六邊形的定義只是方便更加形象的理解。咱們知道分層架構的重要做用就是避免耦合的出現,經典分層架構和六邊形架構都是分層架構的一種,可是所發揮的做用會有些不一樣,經典分層架構更多的精力放在抽象的分離上,每一個層的職責分的很明確,各個層的依賴關係更加抽象化,從而避免耦合的出現,而在六邊形架構中,是用「組件化」的形式來避免耦合的出現,每一個業務單元儘量的最小化,而後把這些業務組件集合起來,用一個錘子把他們都拍扁,因此,在整個集合中,這些小的業務單元都是「平等的」,這種方式用一個詞來歸納,那就是「扁平化」。性能優化
設計模式(Design Pattern)是一套被反覆使用、多數人知曉的、通過分類的、代碼設計經驗的總結。使用設計模式的目的:爲了代碼可重用性、讓代碼更容易被他人理解、保證代碼可靠性。 設計模式使代碼編寫真正工程化;設計模式是軟件工程的基石脈絡,如同大廈的結構同樣。架構
一、設計模式的重要性:框架
設計模式是高級軟件工程師和架構師面試基本必問的項目(先經過面試進入這個門檻咱們再談其它)
設計模式是通過大量實踐檢驗的安全高效可複用的解決方案。不要重複發明輪子,並且大多數時候你發明的輪子尚未已有的好
設計模式是被主流工程師/架構師所普遍接受和使用的,你使用它,方便與別人溝通,也方便別人code review(這個夠實在吧)
使用設計模式能夠幫你快速解決80%的代碼設計問題,從而讓你更專一於業務自己
設計模式自己是對幾大特性的利用和對幾大設計原則的踐行,代碼量積累到必定程度,你會發現你已經或多或少的在使用某些設計模式了
架構師或者team leader教授初級工程師設計模式,能夠很方便的以你們承認以方式提升初級工程師的代碼設計水平,從而有利於提升團隊工程實力
設計模式視頻和代碼整理;
我如今要蓋一棟房子(需求),房子固然要蓋得漂亮大方美觀一點。
去把全國最有名的設師Jack叫過來把個人房子先設計出來讓我看一看(架構師),恩Jack果真是老司機,設計的我很滿意。
不過這個房子的左邊不要蓋出來要留出來一部分讓我之後的孩子來用,還有右上角要多加個走廊還有房子的院前要留出啦一部分當花園。
針對這麼多須要更變Jack爽快的答應了,一點也不苦惱,由於Jack早就想到會變動偷偷運用了本身總結了一輩子的方案(設計模式)。
好了搬磚的搬磚、砌牆的砌牆、工人們依靠Jack給出的設計愉快的蓋着房子(程序員)。
架構技術詳解和學習路線與資料分享整理在博客裏;《BATJ一線大廠最主流的Android高級架構技術;體系詳解+學習路線》
(包括自定義控件、NDK、架構設計、混合式開發工程師(React native,Weex)、性能優化、完整商業項目開發等)