前言和章節結構
前言
我想寫一本書
學習Android程式設計細碎的也有一年了,一年來的學習中積累了一些知識,工程知識的學習往往是由一個技術難點引發,從難題出發到解決結束的知識學習路徑很難有結構化的知識儲備。梳理和總結歸納可以讓知識覆蓋起來連起線來構成一張知識網,希望可以動手寫文章,迫使思緒成文,用文章的結構性來規約各個知識點。
回想起剛入門的時候看的入門書籍,大多是以API類別為線索的寫作思路,比如從UI元件相關的類講到四大元件、網路通訊、資料庫。這種思路其實對於作者來說是最省力氣的,因為作者不需要換位思考一個初學者怎麼麼才能輕鬆地理解Android程式設計的思想,只需要將自己所知道的東西整理出來,更像是自己的筆記,而非一本傾注心力寫成的教材,這時候所有的結構清晰層次鮮明對於讀者都沒有任何意義。藉助這種教材,小白讀者的學習曲線必然是陡峭的,其實很大程度上是不必要的suffer。
寫書的目的有兩個:第一是要寫給讀者看,用心的幫他們通過這本書而成長;第二是把所學到的知識聯成一張知識網,幫助自己總結成長。作者應該有教師的意識,實時提醒自己自己這樣寫讀者能否看懂,而不是滔滔不絕的自言自語長篇大論。把知識講得簡單,本質上是一種溝通技術,溝通就是打破阻塞理解的障礙物,作者應該不吝嗇的捅破理解的窗戶紙,打破技術神祕感。如同開發一款網際網路產品,讀者就是使用者,學習就是需求,把閱讀和學習的體驗做好才是IT技術圖書的價值所在,才是IT技術圖書作者的價值所在。
這樣一本書應該怎麼寫
以真實需求為出發點,這個需求會貫穿大部分Android知識點。
以完整應用的迭代式開發過程為篇章線索,每一個篇章代表我們開發的一個階段,也對應我們提供的git源的一次版本迭代。讀者可以通過桌面git工具同步到本地,讀者還可以通過版本比較的外掛直觀地感受到做出的修改。這個過程中出版的書籍充當了程式碼版本變化的解釋說明,書籍中儘可能不出現大篇幅原始碼,而全都是乾貨。
在開發過程中引出技術知識點的理論敘述,將知識點應用到技術場景中,完成一個知識點從理論到實踐的閉環。“講解知識點”和“講解知識點並在開發上下文中將該知識點與其他知識點聯絡起來加以應用”的區別對使用者的閱讀體驗和理解感知將是非常不同的。
既然我們的目的是呈獻給讀者一個Android應用開發技術解決方案,那麼我們就從Android的理念到迭代開發的直觀感知,從單個API的作用到組織成一個原始碼工程,這樣來體現一種系統化思維,雖然寫作的複雜度增加,然而更容易融合進人類的自然認知過程中。
意淫出來一個需求
在本書裡,我們的需求是做一個雲平臺檔案分享的社交+網盤App。
對內管理自己的文件,對外與別人共享自己的文件,並且拿來賺錢和社交。
我們略去探討這個方案市場可行性的分析,和具體方案的specification,雖然這對於一個產品來說很重要,但我們畢竟是在教學,讀者以後跟產品撕逼的機會還是很多的,我們還是先讓美好的事情先發生。
作者心中有一個大致的規劃,讀者只需要跟著作者的思路,作者會慢慢的告訴讀者我們要做什麼。現在讀者需要知道我們這個東西的粗線條的技術方案。
迭代式開發過程
對於一個希望貫穿儘可能多的技術點的Android教學專案來說,我們的目標似乎顯得有些太龐大了,事實上這個教學專案如果做出來,是可以直接拉風投運營起來的了。然而對我們來說好訊息是,通過合理的制定迭代路徑將大目標breakdown成一個一個的版本,就像生物進化一樣。這意味著我們先簡單的設計完成一個區域性的功能,當然有可能做出來的東西在以後看來根本不是那麼回事,這意味著我們需要不斷的重構,前幾個版本的程式碼可能會在以後被改的面目全非。隨著功能點的新增,舊的設計可能不再滿足軟體的可擴充套件性和可靠性,重構本質上是將問題域到解域的被扭曲的抽象做重新的抽象。為此,我們需要不斷地修正我們的設計和實現,隨著需求的變更和版本迭代,軟體的抽象層級增加,功能逐漸會框架化和模組化,在我們迭代的過程中讀者會深深地感受到這一點。
迴歸現實和可操作性,我們首先感受一下我們最終的技術終點,進而規劃一個版本迭代演進線路圖,通過小版本的迭代最終達到我們想要的效果。
技術Over View
UI 類似微信的檢視結構,一個Activity帶幾個Fragment,Fragment之間使用ViewPager產生滑動的效果
資料庫 雲端的資料,本地資料庫,記憶體物件三個層次都儲存著描述使用者的使用上下文的資訊,比如使用者個人資料,使用者雲端儲存,使用者全域性設定,使用者社交關係,聊天資料等等。
IPC機制與後臺服務 後臺檔案系統掃描,雲端本地記憶體的資料同步
網路通訊機制 使用HTTP和JSON與雲端伺服器通訊
迭代演進線路圖
在教學上可以使讀者理解View控制元件以及xml等檢視層的概念,同時讓讀者明白資原始檔和R檔案的關係,初步使用Activity。
引入ListView的概念,讓讀者理解Adapter的概念,同時增加Activity,生成Activity跳轉的場景,引入Intent的概念。
在ListView裡面載入圖片,使用非同步載入策略引入Android跨執行緒通訊的Handler+Looper概念。
將UI系統改為基於Fragment + ViewPager的,於是將現存程式碼重構到Fragment上。理解了Fragment的機制之後我們需要搭起一個Fragment託管框架,幫助Fragment完成跳轉和傳值的功能。
引入話框的使用
使用Preference機制
使用檔案儲存API
UI-Bean-SqlLite-Cloud四級資料模型的同步。此處考慮建立後臺服務,線上程中掃描檔案系統中的有意義的檔案,如文件,後續可以擴充套件到媒體檔案。先為我們的顯示框架對應的資料元素建立對應的Bean物件作為記憶體中的資料模型。
設計一個本地資料庫基於SqlLite或者GreenDao的框架,寫一個介面可以同步資料,從資料庫到記憶體的同步器。
引入影像操作
引入繪圖
引入
建設伺服器,並在Android工程中引入Http連線和JSON解析庫,方便網路資料請求
web伺服器建設
後臺伺服器開發
將後臺和前臺除錯通
學習者如何檢視原始碼
在http://code.google.com/p/tortoisegit/下載tortoise git,我們提供一個github的地址,使用tortoise 的log功能即可檢視每一次提交和程式碼改動。
學習者可以使用我們的後臺介面做測試
相關文章
- JDBC章節總結JDBC
- 2017 Material design 第四章第四節《結構》Material Design
- CoLAKE: 如何實現非結構性語言和結構性知識表徵的同步訓練
- 第三節,分支結構
- 第二章 程式結構
- 調節記憶體結構記憶體
- Redis-第十章節-連結串列Redis
- 第二章 資料結構資料結構
- 資料結構第10章 排序資料結構排序
- 關於DDD,語言和主流架構架構
- c primer plus 章節學習,經驗總結。
- 【JVM】體系結構及其細節JVM
- 第二章 處理器結構
- Java-呼叫R語言和呼叫Python(前後端展示)JavaR語言Python後端
- 章節排序問題排序
- 淺析遊戲中的教程引導和章節連結遊戲
- 資料結構第九節(排序(上))資料結構排序
- 資料結構第七節(圖(中))資料結構
- 第四章_選擇結構(二)
- 第五章——結構體與類(序)結構體
- 第七章——字串(字串內部結構)字串
- 第二章:介面和目錄結構
- 資料結構總結 第一章:緒論資料結構
- 資料結構思維 第五章 雙連結串列資料結構
- 民訴章節體系
- 現代軟體工程構建之法 前五章閱讀感想&困惑軟體工程
- 資料結構 第一節 第六課資料結構
- 【資料結構】第六章學習小結--- 圖資料結構
- 軟體體系結構第九章
- 第一章 JVM記憶體結構JVM記憶體
- 第三章 函式與程式結構函式
- 鴻蒙開發前四章鴻蒙
- 使用HTML語言和CSS開發商業站點第三章HTMLCSS
- 使用HTML語言和CSS開發商業站點第四章HTMLCSS
- 資料結構第十一節(雜湊表)資料結構
- PE結構-合併節(附例項程式碼)
- 第一章JVM與Java體系結構JVMJava
- 第一章 JVM與Java體系結構JVMJava