經過4天的開發,ios的網絡書店基本完成了:
- 登陸注冊
- 圖書清單,下拉放開重新整理,下拉到底檢視更多,圖檔異步加載
- 我的資訊,檢視訂單修改密碼
- 檢視圖書詳情
- 加入購物車
- 送出訂單
- sqllite存放浏覽日志,定時送出
- plist檔案存放購物車
架構中最重要的元素:
- 子產品化,縱向分割
- 階層化,橫向分割
- 抽象和實作分離
- 解耦,同構元件如何通訊,異構元件如何通訊
- 職責分離
重構中:消除重複代碼,消除魔數
BookStore應用雖然簡單,但包括的内容不少
- 分層架構
- 層之間的通訊控制
- 各種資料通路的示範
分層架構如下:
- Resources用于各種資源,比如圖檔、icon和多語言的文本
- Core就是業務邏輯層用于管理資料通路層,以及作為資料的容器
- Controller就是業務邏輯控制器,也可以命名為Service,每一種業務邏輯對應一種控制器
- Entity就是資料實體,此外還用于description的生成以及序列化控制
- Data就是資料通路層
- 其中有本地的資料通路(包括UserDefaults、plist檔案以及本地的sqllite)
- 以及遠端的資料通路(http+json)
- UI就是前端
- 包括ViewController
- 對應的View
- 封裝的TableViewCell
- ViewController之間通訊的協定
- Utility中包括擴充、常量以及小工具
層之間的通訊控制如下:
- ViewController作為前端入口,直接和Controller通訊,其中VC->C是方法調用,而C->VC是NoficationCenter的消息通知,Controller之間采用的是方法調用
- ViewController之間的通訊采用的是協定,效率高又可以解耦
- Controller作為業務邏輯的入口,會調用本地資料通路服務和遠端資料通路服務,對于後者BookController到BookService采用的是方法調用,傳回采用的是回調Block
- Service網絡層采用異步OperationQueue,異步完成後調用Controller注冊的回調方法,回調方法中再發通知,通知ViewController層
- Service網絡層有BaseService封裝了網絡的通用處理,會直接和BaseViewController進行互動,用于通用的一些等待和錯誤處理
C層到VC層采用通知,VC層之間采用協定,VC到C層采用方法調用,C到S層采用方法調用,S到C層采用Block回調。
代碼下載下傳:
這裡服務端程式(基于ASP.NET MVC)下載下傳:
資料庫備份(基于MS SQL)下載下傳:
希望不要誤導新手,高手路過幫忙看一下有什麼可以改進的,特别是架構上。
作者:
lovecindywang本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。