標籤:
上一篇(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 設計隨便說說之簡單實踐(合理組合)