Android 設計隨便說說之簡單實踐(合理組合)

來源:互聯網
上載者:User

標籤:

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.