iOS專案開發MVVM架構實踐(第三篇:應用佈局)
有了前面兩篇的基礎,我們通過具體的例子來說明這個架構是怎麼佈局的,然後我們一步步的實現它們。接下來,我們一大家熟悉的使用者登入來做介紹,比如我們有這樣的一個登入介面,下圖:

需求有,那就讓我們動手去實現它的整個流程:
第一步:用xcode打我們的專案,新建一個framework(File->New->Target->Cocoa Touch Framework),命名為Services,匯入NetworkAPI的framework以及其他用使用的第三方framework,首先,先定義login介面的Router,如下:

接著,實現登入的service方法,新建一個AccountServices的檔案,具體如下:

由於,我們需要把用登入資料本地化,這邊使用sugarrecord(具體使用檢視GitHub)來簡化coredata資料的儲存,User(Model,跟建services framework的方式一樣)的定義如下:

同時,使用了ObjectMapper把JSON轉化為Model(User),具體使用方法這邊就不做介紹,請檢視GitHub文件。
第二步,從第一步我們實現這個架構的Services層和Model層,接下來我們要實現就是為View層提供可監聽的屬性(Property)與可執行的動作(Action)的ViewModel層,跟前面類似新建一個ViewModel的framework,具體如下:


主要有兩個檔案,分別為ViewModelBase.Swift和LoginViewModel.swift,我們整個使用者登入邏輯到這邊基本都實現了,就差怎麼運用View層,由於,整個登入介面是用程式碼寫的,使用到UITableView, 使用者輸入的值是通過delegate傳出來的,所以這邊使用Action傳入輸入引數的方式實現,如果使用storyboard畫介面的,可以考慮屬性繫結的方式,ViewModel的就應該這麼寫了,如下:

繫結,其實很簡單,類似如下圖所示:


最後一步,也就是View層,不管是用程式碼寫的介面,還是storyboard畫的介面,上面的兩種ViewModel的實現都可以用,主要看那種使用其他比較方便,要做的事情比較就好了。我這邊運用的是第一種,是由於比較適合我運用場景,大致的程式碼如下:


到此,整個架構的佈局就完成了,大致可以歸為:Model -> Services -> ViewModel -> View,我們這邊在Model與ViewModel之間插入一個Services層,主要是為了分離呼叫API邏輯實現的部分,減少ViewModel的負擔,讓其看起來比較輕量級。
就到此了!
相關文章
- iOS應用千萬級架構:MVVM框架iOS架構MVVM框架
- web 應用開發最佳實踐之一:避免大型、複雜的佈局和佈局抖動Web
- Flutter 應用程式佈局的最佳實踐Flutter
- Android應用架構的發展和實踐Android應用架構
- [譯] 使用 Architecture Components 開發 MVVM 應用:MVP 開發者的實踐指南MVVMMVP
- iOS應用千萬級架構開篇iOS架構
- iOS架構由淺入深 | MVVMiOS架構MVVM
- MVVM架構在Flutter中的簡單實踐MVVM架構Flutter
- Swift + RxSwift MVVM 模組化專案實踐SwiftMVVM
- .NET雲原生應用實踐(一):從搭建專案框架結構開始框架
- Flutter與Native混合開發-FlutterBoost整合應用和開發實踐(iOS)FlutteriOS
- Flutter應用的Clean架構示例專案Flutter架構
- COLA 4.0應用架構和DDD經典專案實踐:貨物運輸系統應用架構
- HarmonyOS NEXT應用開發—驗證碼佈局
- 淺談設計模式在iOS開發實戰專案中的應用設計模式iOS
- 實戰指南 | Serverless 架構下的應用開發Server架構
- 前端響應式佈局原理與實踐前端
- iOS MVC、MVVM、MVP架構模式淺淺析iOSMVCMVVMMVP架構模式
- iOS架構淺談從 MVC、MVP 到 MVVMiOS架構MVCMVPMVVM
- 阿里DDD專案最佳實踐-COLA 架構總覽阿里架構
- [開發教程]第9講:Bootstrap響應式佈局的實用類boot
- TRIZ在專利佈局中的應用
- iOS開發-MVP架構模式iOSMVP架構模式
- 移動 WEB 開發的佈局方式 ---- 響應式佈局Web
- Flex佈局應用Flex
- Vue 專案架構設計與工程化實踐Vue架構
- [譯]iOS架構模式——解密MVC、MVP、MVVM和VIPERiOS架構模式解密MVCMVPMVVM
- 用mobx構建大型專案的最佳實踐
- 簡單專案實戰flutter(佈局篇)Flutter
- 人人都是 Serverless 架構師 | 彈幕應用開發實戰Server架構
- Unity應用架構設計(12)——AOP思想的實踐Unity應用架構
- Unity應用架構設計(1)—— MVVM 模式的設計和實施(Part 2)Unity應用架構MVVM模式
- Unity應用架構設計(1)—— MVVM 模式的設計和實施(Part 1)Unity應用架構MVVM模式
- MVC、MVP、MVVM,談談我對Android應用架構的理解MVCMVPMVVMAndroid應用架構
- iOS架構設計:揭祕MVC, MVP, MVVM以及VIPERiOS架構MVCMVPMVVM
- harmonyOS應用-TableLayout佈局
- 用mobx構建大型專案的最佳實踐(2)
- 一本實踐的專案開發《Python專案開發實戰(第2版)》Python