2017-02-03 33 views
1

我遇到的大部分Swift MVVM示例都使用依賴注入將Model注入ViewModel,然後將ViewModel注入ViewController。這種注入通常建議在AppDelegate中作爲一個單例處理。這對於簡單的例子來說都很好。商業和數據層的Swift MVVM示例

但是,在現實世界中,「模型」實際上不僅僅是一個DTO對象,它假定返回模型/ DTO的數據層是業務&。因此,將模型注入AppDelegate級別的ViewModel是不現實的,因爲View/ViewController將觸發實際的數據刷新。所以模型注射需要在別處發生。此外,大多數示例直接從ViewModel轉到DataAccess,這會導致ViewModel吸收很多業務邏輯,理想情況下它應該只保留視圖的狀態。

有人可以轉發一個全面的端到端的Swift MVVM示例與離散分隔的業務&數據層。爲了使這個問題沒有意見爲基礎,但在提問/回答格式,示例應該有:

  • 獨立業務邏輯層
  • 單獨的數據訪問邏輯層
  • 單獨的模型/ DTO(國家唯一的對象)

的例子也應該清楚地說明:

  • 凡依賴注入發生
  • 有明確的如上所定義的層

回答

0

視圖模型應該協議之間呼叫 層次結構。協議在Swift中非常強大,並且它們儘可能使組件儘可能分離。這也有利於測試。這裏有一個簡單的例子:

// the view model 
protocol ArticleDisplayable { 
    func getTitle() -> String 
} 

// A model 
struct News: ArticleDisplayable { 
    let newsTitle: String 

    func getTitle() -> String { 
     return newsTitle 
    } 
} 

// Another model 
struct BlogPost: ArticleDisplayable { 
    let postTitle: String 

    func getTitle() -> String { 
     return postTitle 
    } 
} 

可以以類似的方式與模型和其他組件(網絡,JSON解析,視圖控制器,集視細胞等)之間的所有其他交互進行。基本上,其他組件只會處理ArticleDisplayable對象,不會與任何模型耦合。