iOS IM開發建議(一)App框架設計

来源:http://www.cnblogs.com/akforsure/archive/2016/03/21/5302288.html
-Advertisement-
Play Games

先說一下為什麼要講框架的設計。 第一、IM應用一般是基於長連接的,也就是後臺一直在收發數據,那這裡就有一個後臺的概念; 第二、如果用戶是一個人群裡面的中心人物的話,那麼他的的數據量就會很大。頁面的顯示及資料庫的處理就需要關註了; 第三、分解app有利於我們降低耦合,在後期維護和升級時,稍微容易一點。


  先說一下為什麼要講框架的設計。

  第一、IM應用一般是基於長連接的,也就是後臺一直在收發數據,那這裡就有一個後臺的概念;

  第二、如果用戶是一個人群裡面的中心人物的話,那麼他的的數據量就會很大。頁面的顯示及資料庫的處理就需要關註了;

  第三、分解app有利於我們降低耦合,在後期維護和升級時,稍微容易一點。

 

  我覺得框架就是先拆解部件再建立聯繫。框架有很多種,我借鑒的是依賴註入。

依賴

  這個模塊是所有部件運行的中間節點,負責app內的信息傳遞和數據處理。因此,app運行時他就必須存在。那這裡有兩個合適的人選,一個是AppDelegate,一個是他的RootViewController。這裡我選擇的是RootViewController,原因我說一下一下:1、我使用了CoreData,也需要處理APNS,所以AppDelegate已經很魁梧了;2、我的app是基於TabBarViewController,而TabBarViewController對用戶是不可見的,他不需要處理UI,而且幾個主要頁面都是他的viewcontrollers,方便調用。

  選好了之後,我們需要明確他的作用。我給他分配了這幾件事情:處理網路模塊推送來的數據,存入資料庫,推送數據更新的通知到各個頁面。也就是外部的數據,到這裡就止步了,不會直接操作UI界面。

網路通訊

  這個模塊負責和伺服器的數據傳輸,app運行階段都不可以被銷毀。所以,這個模塊需要使用單利模式來創建,並且放在全局線程中。這個模塊對外就是收發數據;對內就是傳遞數據到依賴和接受UI界面的發送指令。也就是他只管收發數據,不操作UI和資料庫。

資料庫

  他負責增刪改查。。。(他好輕鬆,只要出個API就好了)

UI界面

  這裡指app所有可視、可交互頁面。所有你想掐死產品的原因都展示在這裡。然而這是用戶可見的,也就是說,不能卡頓,要好操作等等。有些頁面會有很多的UI交互,為此我們不能給他太多負擔。那我就讓他做兩件事,展示和發送請求。展示是他本來的工作,取一下資料庫,更新UI;請求是一個介面,他只要抓取頁面的數據填進去就好了。

 

  總結一下:將每個模塊拆開之後,他們所做的事情就很明確,數據的來源也得到了保證,UI的處理邏輯也簡單。全API的調用方式便於後期拓展。

附簡圖:


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

-Advertisement-
Play Games
更多相關文章
  • selector 選擇器 在App的使用中經常能看到selector的身影 如:一個按鍵看上去白色或者其它顏色,可能是一張圖片 按下去又顯示其它的顏色或者另外一張圖片 這裡使用shape配合使用 正常狀態 按下狀態 selector 佈局中引用 有圖片就去需要建立一個selector 在drawab
  • ListView可能是Android開發中最常用的一個控制項,但要用的純熟還需要不斷的鍛煉。 建立簡單的ListView 1.在佈局文件(.xml)中添加<ListView>標簽 2.在MainActivity.java中用適配器綁定 可以看到 數組內容無法直接加到ListView中,所以要用適配器。
  • 文章出自:聽雲博客 Reveal簡介: 這是個神奇的工具,它能常透徹地分析個App的UI結構。 這個工具包括兩部分,部分是在PC上運行的一個獨立應用,即Reveal.app,另一部分代碼在你要分析的某個App中,為此,Reveal提供了一個Framework和一個Dylib供使用。這兩部分之間通過B
  • shape 先看下,系統自帶的EditText和Button的外形 下麵看加了shape後的效果 簡單點講,shape可以為組件加上背景邊框,圓角之類的可以配合selector使用 shapeXXX.xml定義在drawable目錄下 EditText使用的 Button使用的定義的都 一樣 佈局中
  • java.lang.RuntimeException: Unable to start activity ComponentInfo{com.xxx...}: java.lang.IllegalStateException: Couldn't read row 0, col -1 from Curs
  • 如果想對自己自定義的類進行解檔和歸檔的話 必須遵循一個協議:NSCoding Student.h 文件 Student.m 文件 客戶端代碼 運行結果:
  • 此文章來自:聽雲博客 很多時候需要網路抓包分析,在iPhone上抓包稍有不同,下麵介紹三種常用的方式。分析工具以wireshark為例。 一、最簡單的方式:用PC作為熱點,在PC上抓包 優點:簡單 缺點:不能抓真機2g/3g/4g網路數據 步驟如下: 1、PC接上有線 2、PC用wifi方式共用網路
  • 載入使用AnimationUtils.load方法載入 一般都用代碼控制 如果需要 用XML控制可以在res\下建立 animator,即可, 在這個目錄建立XML文件如果 下方法導入
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...