前言和章節結構

jeyhan發表於2015-07-23

前言

我想寫一本書

學習Android程式設計細碎的也有一年了,一年來的學習中積累了一些知識,工程知識的學習往往是由一個技術難點引發,從難題出發到解決結束的知識學習路徑很難有結構化的知識儲備。梳理和總結歸納可以讓知識覆蓋起來連起線來構成一張知識網,希望可以動手寫文章,迫使思緒成文,用文章的結構性來規約各個知識點。

回想起剛入門的時候看的入門書籍,大多是以API類別為線索的寫作思路,比如從UI元件相關的類講到四大元件、網路通訊、資料庫。這種思路其實對於作者來說是最省力氣的,因為作者不需要換位思考一個初學者怎麼麼才能輕鬆地理解Android程式設計的思想,只需要將自己所知道的東西整理出來,更像是自己的筆記,而非一本傾注心力寫成的教材,這時候所有的結構清晰層次鮮明對於讀者都沒有任何意義。藉助這種教材,小白讀者的學習曲線必然是陡峭的,其實很大程度上是不必要的suffer。

寫書的目的有兩個:第一是要寫給讀者看,用心的幫他們通過這本書而成長;第二是把所學到的知識聯成一張知識網,幫助自己總結成長。作者應該有教師的意識,實時提醒自己自己這樣寫讀者能否看懂,而不是滔滔不絕的自言自語長篇大論。把知識講得簡單,本質上是一種溝通技術,溝通就是打破阻塞理解的障礙物,作者應該不吝嗇的捅破理解的窗戶紙,打破技術神祕感。如同開發一款網際網路產品,讀者就是使用者,學習就是需求,把閱讀和學習的體驗做好才是IT技術圖書的價值所在,才是IT技術圖書作者的價值所在。

這樣一本書應該怎麼寫

  1. 真實需求為出發點,這個需求會貫穿大部分Android知識點。

  2. 以完整應用的迭代式開發過程為篇章線索,每一個篇章代表我們開發的一個階段,也對應我們提供的git源的一次版本迭代。讀者可以通過桌面git工具同步到本地,讀者還可以通過版本比較的外掛直觀地感受到做出的修改。這個過程中出版的書籍充當了程式碼版本變化的解釋說明,書籍中儘可能不出現大篇幅原始碼,而全都是乾貨。

  3. 在開發過程中引出技術知識點的理論敘述,將知識點應用到技術場景中,完成一個知識點從理論到實踐的閉環。“講解知識點”和“講解知識點並在開發上下文中將該知識點與其他知識點聯絡起來加以應用”的區別對使用者的閱讀體驗和理解感知將是非常不同的。

既然我們的目的是呈獻給讀者一個Android應用開發技術解決方案,那麼我們就從Android的理念到迭代開發的直觀感知,從單個API的作用到組織成一個原始碼工程,這樣來體現一種系統化思維,雖然寫作的複雜度增加,然而更容易融合進人類的自然認知過程中。

意淫出來一個需求

在本書裡,我們的需求是做一個雲平臺檔案分享的社交+網盤App

對內管理自己的文件,對外與別人共享自己的文件,並且拿來賺錢和社交。

我們略去探討這個方案市場可行性的分析,和具體方案的specification,雖然這對於一個產品來說很重要,但我們畢竟是在教學,讀者以後跟產品撕逼的機會還是很多的,我們還是先讓美好的事情先發生。

作者心中有一個大致的規劃,讀者只需要跟著作者的思路,作者會慢慢的告訴讀者我們要做什麼。現在讀者需要知道我們這個東西的粗線條的技術方案。

迭代式開發過程

對於一個希望貫穿儘可能多的技術點的Android教學專案來說,我們的目標似乎顯得有些太龐大了,事實上這個教學專案如果做出來,是可以直接拉風投運營起來的了。然而對我們來說好訊息是,通過合理的制定迭代路徑將大目標breakdown成一個一個的版本,就像生物進化一樣。這意味著我們先簡單的設計完成一個區域性的功能,當然有可能做出來的東西在以後看來根本不是那麼回事,這意味著我們需要不斷的重構,前幾個版本的程式碼可能會在以後被改的面目全非。隨著功能點的新增,舊的設計可能不再滿足軟體的可擴充套件性和可靠性,重構本質上是將問題域解域被扭曲的抽象重新的抽象。為此,我們需要不斷地修正我們的設計和實現,隨著需求的變更和版本迭代,軟體的抽象層級增加,功能逐漸會框架化和模組化,在我們迭代的過程中讀者會深深地感受到這一點。

迴歸現實和可操作性,我們首先感受一下我們最終的技術終點,進而規劃一個版本迭代演進線路圖,通過小版本的迭代最終達到我們想要的效果。

技術Over View

UI 類似微信的檢視結構,一個Activity帶幾個Fragment,Fragment之間使用ViewPager產生滑動的效果

資料庫 雲端的資料,本地資料庫,記憶體物件三個層次都儲存著描述使用者的使用上下文的資訊,比如使用者個人資料,使用者雲端儲存,使用者全域性設定,使用者社交關係,聊天資料等等。

IPC機制與後臺服務 後臺檔案系統掃描,雲端本地記憶體的資料同步

網路通訊機制 使用HTTP和JSON與雲端伺服器通訊

迭代演進線路圖

  1. 在教學上可以使讀者理解View控制元件以及xml等檢視層的概念,同時讓讀者明白資原始檔和R檔案的關係,初步使用Activity。

  2. 引入ListView的概念,讓讀者理解Adapter的概念,同時增加Activity,生成Activity跳轉的場景,引入Intent的概念。

  3. 在ListView裡面載入圖片,使用非同步載入策略引入Android跨執行緒通訊的Handler+Looper概念。

  4. 將UI系統改為基於Fragment + ViewPager的,於是將現存程式碼重構到Fragment上。理解了Fragment的機制之後我們需要搭起一個Fragment託管框架,幫助Fragment完成跳轉和傳值的功能。

  5. 引入話框的使用

  6. 使用Preference機制

  7. 使用檔案儲存API

  8. UI-Bean-SqlLite-Cloud四級資料模型的同步。此處考慮建立後臺服務,線上程中掃描檔案系統中的有意義的檔案,如文件,後續可以擴充套件到媒體檔案。先為我們的顯示框架對應的資料元素建立對應的Bean物件作為記憶體中的資料模型。

  9. 設計一個本地資料庫基於SqlLite或者GreenDao的框架,寫一個介面可以同步資料,從資料庫到記憶體的同步器。

  10. 引入影像操作

  11. 引入繪圖

  12. 引入

  13. 建設伺服器,並在Android工程中引入Http連線和JSON解析庫,方便網路資料請求

web伺服器建設

  1. 後臺伺服器開發

  2. 將後臺和前臺除錯通

學習者如何檢視原始碼

http://code.google.com/p/tortoisegit/下載tortoise git,我們提供一個github的地址,使用tortoise 的log功能即可檢視每一次提交和程式碼改動。

學習者可以使用我們的後臺介面做測試

相關文章