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

来源:http://www.cnblogs.com/ouyanliu/archive/2016/08/16/5774906.html
-Advertisement-
Play Games

上一篇(Android 設計隨便說說之簡單實踐(模塊劃分))例舉了應用商店設計來說明怎麼做模塊劃分。模塊劃分主要依賴於第一是業務需求,具體是怎麼樣的業務。應用商店則包括兩個業務,就是向用戶展示applist,和下載app。第二是運行環境,在Android平臺,有androidsdk提供socket等 ...


上一篇(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 下載模塊,還需要說麽?我想不必了。

其實合理組合就看你在模塊之間如何調度了。模塊之所以提供介面,是因為第一,他的模塊不需要其他模塊所關心的。只要調用它的介面即可。第二,如果他的實現出現問題,問題解決也必然在這個模塊裡面。不會需要其他地方的修改。因此原則上無論模塊如何改變,但不允許介面改變。

每個模塊都有自己的依賴類,但是如果其他模塊有類似的實現,則提供的介面必然和前者模塊的依賴做出一個適配來實現無縫連接。上面的例子都是很簡單的。基本上沒有太多的需要依賴和介面之間的適配,但是實際工作中多著去了。

最後,很抱歉的說,上面的例子多有紕漏,很多地方只是說明說的很簡單,很粗糙,有冗餘,甚至有錯。僅僅希望能有所獲益。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ListView是開發中最常用的控制項了,但是總是會寫重覆的代碼,浪費時間又沒有意義。 最近參考一些資料,發現一個萬能ListView適配器,代碼量少,節省時間,總結一下分享給大家。 首先有一個自定義的Adapter繼承於BaseAdapter,下麵是自定義的Adapter,精華在getView()方 ...
  • 接上節:[APP] Android 開發筆記 001 4. 預設項目結構說明: 這裡我使用Sublime Text 進行載入。 1) res目錄: -drawable-*dpi 目錄: 該目錄下放置這各種圖片資源.不同的dpi對應不同的屏幕尺寸 -layout 目錄: 該目錄下放置佈局文件 -val ...
  • 1. 安裝SDK Android SDK http://developer.android.com/sdk/index.html https://dl.google.com/android/android-sdk_r24.4.1-windows.zip (No installer) https:// ...
  • 1、把aar複製到項目中的 libs 裡面 2、在module 裡面的build.gradle 的根目錄添加 3、在module 裡面的build.gradle 的根目錄的 dependencies 標簽裡面添加 其中 SDK-release 是你的aar的名字 4、在做完了前三步以後,會看到在項目 ...
  • iOS開發 中的代理實現 關於今天為什麼要發這篇文字的原因:今天在和同事聊天的時候他跟我說項目中給他的block有時候不太能看的懂,讓我儘量用代理寫,好吧心累了,那就先從寫個代理demo,防止以後他看不懂,嘿嘿 iOS開發 中的代理實現 今天我舉例的東西呢我就不寫demo了,直接從項目中吧需要的片段 ...
  • 解決辦法Item xml 根節點添加 android:descendantFocusability="blocksDescendants" Button 設置 android:focusable="false" 這樣點擊Button 和ListView Item 可以分別響應自己的點擊事件 開發中很 ...
  • 開源框架利與弊 開源框架給開發者提供了便利,避免了重覆造輪子,但是卻隱藏了一些開發上的細節,如果不關註其內部實現,那麼將不利於開發人員掌握核心技術,當然也談不上更好的使用它,計劃分析項目的集成使用和低層實現。 基本四部曲 1. ImageLoaderConfiguration(有預設) 通過Imag ...
  • 代碼: - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. [self showAlertView:@"11111"]; } //自定義彈出框 -(void)sho ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...