2017-01-15 3 views
0

このコードはMVVMアーキテクチャの正しい実装ですか?私はTableViewで将来の使用のためにプライベートプロパティにダウンロードした配列を保持することができますか、またはすべてのコストでそのような状況を避ける必要がありますか?Arrayを使用したSwift ViewModelの実装

コード:

import Foundation 

class StopsViewModel { 

    weak var delegate: StopsViewModelDelegate? 
    private let dbService: DatabaseService 
    private var stops = [Stop]() 

    init(withDbService dbService: DatabaseService) { 
     self.dbService = dbService 
    } 

    func loadStops() { 
     dbService.getStops(completion: { [weak self] stops in 
      self?.stops = stops 
      self?.delegate?.getStopsCallFinished() 
     }) 
    } 

    func getStop(atIndex index: Int) -> Stop { 
     return self.stops[index] 
    } 

    func getRowCount() -> Int { 
     return self.stops.count 
    } 

    func getSectionsCount() -> Int { 
     return 1 
    } 
} 

protocol StopsViewModelDelegate: class { 
    func getStopsCallFinished() 
} 

答えて

0

仕事でいくつかの上級開発者と話をした後、彼らは、これは、彼らが通常行く方法であることを教えてくれました。ビューモデル内で配列を保持してもMVVMパターンが損なわれないので、データを再利用するのが簡単になり、追加のフィールドを保持することからデータサービスがクリアされます(再利用性が向上します)。

+0

私も答えを探していました。面白い点IMOは、あなたがViewControllerからgetStop(atIndex :)を呼び出さなければならないということです。それはMVVMのパターンを破るか? VCがモデルについて知っていなければならないからです(この場合はStop)。 getStopParameter(atIndex :)関数を持つ方が良いですか?代わりにself.stops [index] .parameterを返しますか? – mrhangz

関連する問題