經過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)下載:這裡
Database Backup(基於MS SQL)下載:這裡
希望不要誤導新手,高手路過幫忙看一下有什麼可以改進的,特別是架構上。