MVVM -1에서 이상한 점을 느낀 코드를 개선해 보기로 했다.

개선사항

NewsListViewController에서 WebService를 의존하는데 V에서 서비스로직을 의존하는 것보다

VM에서 Service로직을 의존하게 하는 것이 바람직 하지 않을까?

기존 NewsTableViewController→ setup Method

private func setup(){
        self.navigationController?.navigationBar.prefersLargeTitles = true
     
        
        WebService().getArticles() { (articles) in
            if let articles = articles {
                self.articleListVM = ArticleListViewModel(articles: articles)
            }
            DispatchQueue.main.async {
                self.tableView.reloadData()
            }
        }
    }

개선한 setup method

private func setup() {
        self.navigationController?.navigationBar.prefersLargeTitles = true
        self.articleListVM  = ArticleListViewModel{ (result) in
            if result{
                DispatchQueue.main.async {
                    self.tableView.reloadData()
                }
            }
        }
}

웹서비스를 통신을 통해 가져오는 서비스 로직을 articleListVM의 init메소드에서 하게 만듬

ArticleListViewModel

class ArticleListViewModel {
    var articles: [Article] = [Article]()
    
    init(_ callback:@escaping(Bool) -> ()){
        WebService().getArticles{ (articles) in
            if let articles = articles {
                self.articles = articles
                callback(true)
            }
            else{
                self.articles = [Article]()
                callback(false)
            }
        }
    }
}