編輯:關於android開發
上一篇(Android 設計隨便說說之簡單實踐(模塊劃分))例舉了應用商店設計來說明怎麼做模塊劃分。模塊劃分主要依賴於第一是業務需求,具體是怎麼樣的業務。應用商店則包括兩個業務,就是向用戶展示applist,和下載app。第二是運行環境,在Android平台,有androidsdk提供socket等API支持。因此將模塊大體換發了5個模塊。(當然了圖片加載可以額外提出,用開源組件去做,但是這裡為了說明如何設計,暫不提到。還有下載也可以利用開源組件)分別是如下:
模塊1 UI模塊,負責展示信息和用戶操作,主要類,RecommendActivity 負責數據展示和接受用戶操作。RecommendInterface,負責底層數據回調。(這裡只是舉例,下載的就不在提及)
這三個類之間的調用關系如下:(我的viso貌似沒有激活部分功能不能用只能口述了)
1 在RecommendActivity的onCreate裡面初始化RecommendInterface實例RecommendBase實例。並將RecommendInterface注入到RecommendBase裡面。
2 RecommendActivity隨後給RecommendBase發送指令調用getPageViewData等方法請求數據。
3 當用戶點擊下載。gotoDownLoadApp的是時候,RecommendBase開始調用startDownloadApp。
好了UI模塊的調用流程大體到這裡。
模塊2 調度模塊。負責整體業務調度。主要的類包括如下:
巨復雜。不過我們繼續理一下各個類調用的關系。
1 初始化該模塊就是初始化Controller。Controller初始化ControllerDownLoadAppInfosInterface, 和ControllerBase。Controller將ControlelrDownLoadAppInfosInterface注入到ControllerBase裡面。controllerBase初始化的時候初始化ControllerDownLoadAppInterface。
2 關鍵點,UI模塊如何和調度模塊交互。
2.1 RecommendBase裡面初始化Controller和ControllerUIInterface。並將RecommendInterface注入到ControlelrUiInterface裡面。
2.2 當RecommendActivity接收到用戶指令時,RecommendBase接收到指令調用Controller.而當異步的結果出來時,ControllerUIInterface 調用RecommendInterface。並且由RecommendInterface 將UI界面更新給用戶。(由此可見消息是從RecommendBase循環了一圈。)
3 頁面數據加載。Controller接收到RecommendBase來的指令後調用ControllerBase啟動加載模板和數據getViewDataByTempID。當底層獲取到Temp和Data的是時候,會通知到ControlelrDownLoadAppInfosInterface, 這個接口在回調Controller。 Controller調用CreateViewData。之後會調用ControllerUIInterface調用將數據給到UI。
還有下載過程。這裡就不在推演了。但是主要的是要看模塊間怎麼調用,也即是說怎麼合理組合。
會發現,上層業務和自己的依賴接口是一套全面的完整的業務。而調度層也是完成了一套完整的業務。
第三個模塊,數據解析模塊,負責網絡的applist數據和模板解析並組合。
關鍵點,如何和調度模塊交互
在調度層的ControllerBase裡面初始化該類DataWorkManager, 調度層有了模板和app數據後,調用setData,然後在調用getViewDataBytempId就可以或的模板數據。
也就是說,在調度層的依賴類裡面,初始化自己的接口,並且根據依賴類的方法來實現業務。
但是這個是一個業務單元,不能實現整體業務。
第四個模塊,網絡請求模塊。
關鍵點,如何和調度層交互。
首先在ControllerBase裡面初始化NetTaskManager和NetTaskResultListener。並且ControllerDownLoadAppinfosInterface注入到NetTaskResultListener。
然後開始調用downLoadTemplateById()。異步的,結果由NetTaskResultListener反饋給ControllerDownLoadAppinfosInterface。由ControllerDownLoadAppinfosInterface來處理這個消息。
模塊5 下載模塊,還需要說麼?我想不必了。
其實合理組合就看你在模塊之間如何調度了。模塊之所以提供接口,是因為第一,他的模塊不需要其他模塊所關心的。只要調用它的接口即可。第二,如果他的實現出現問題,問題解決也必然在這個模塊裡面。不會需要其他地方的修改。因此原則上無論模塊如何改變,但不允許接口改變。
每個模塊都有自己的依賴類,但是如果其他模塊有類似的實現,則提供的接口必然和前者模塊的依賴做出一個適配來實現無縫連接。上面的例子都是很簡單的。基本上沒有太多的需要依賴和接口之間的適配,但是實際工作中多著去了。
最後,很抱歉的說,上面的例子多有纰漏,很多地方只是說明說的很簡單,很粗糙,有冗余,甚至有錯。僅僅希望能有所獲益。
Android特效專輯(六)——仿QQ聊天撒花特效,無形裝逼,最為致命 Android特效專輯(六)——仿QQ聊天撒花特效,無形裝逼,最為致命
android沉浸式狀態欄、變色狀態欄、透明狀態欄、修改狀態欄顏色及透明 首先我要區分清楚沉浸式狀態欄與變色狀態欄。 沉浸式狀態欄指的是,狀態欄隱藏,在手指做了相關操作後
OLTP應用之MySQL架構選型在我們下定決心將企業核心應用從企業級數據庫遷移到開源數據庫產品、使用本地磁盤代替共享存儲之前。我覺得我們必須要面對並回答以下幾個問題之後才
安卓第六天筆記--ListView,安卓--listview安卓第六天筆記--ListView 1.AdapteView AdapteView 繼承ViewGroup它的