Как стать автором
Обновить

Комментарии 4

«Дату конечно лучше хранить как тип Data».
Лучше все-таки как тип Date.
Ага, спасибо, опечатался )
Ваш DRHTableViewDataModelItem — это View Model — модель не содержащая в себе данных, а только их строковые представления, которая используется сугубо для конфигурации View.
DRHTableViewDataModel — фетчит данные (из сервера, я так предпологаю) и выполняет роль какого-то сервиса (название точно соответствует назначению?). И возвращает данные непосредственно во View. Как правило, в приложениях данные обычно кешируются — не хватает бд для их хранения (хотелось бы увидеть, что Вы будете хранить там, неужели DRHTableViewDataModelItem?)
По хорошему не хватает еще отдельного Data Source для таблички, контроллеру совсем не обязательно брать на себя эту обязанность (Вы же говорите про переиспользуемость). И именно датасорс мог бы взять на себя ответственность следить за изменениями в бд и предоставлению актуальных ViewModel для таблички.
А контроллеру бы оставили только то, что ему положено — обработка действия пользователя.

Спасибо за статью.
Есть пара замечаний:


  1. Раз уж мы уже создали DataModel, то нужно сделать и последний шаг — отказаться от хранения данных в нашем ViewController. И это обязательно. Сейчас у вас получается, что вы храните одни и те же данные в двух местах и, очевидно, это может привести к проблемам. Нужно лишь добавить в ваш класс DRHTableViewDataModel метод item(forIndexPath: IndexPath) и вызывать его, когда необходимо конфигурировать ячейки таблицы.
    Кроме того, это избавит вас от проблем, когда структура таблицы будет отличаться от той простейшей, которая использована в примере (например, более одной секции). Иначе вам придется городить сложный код в ViewController, а именно этого мы хотим избежать, не так ли?
  2. Для регистрации nib ячеек можно пройти чуть дальше и изолировать эту логику вообще в базовом классе ячеек (а лучше в UITableViewCell extension). В классе ячейки нужно создать метод
    static func register(inTableView tableView: UITableView?) {
     tableView?.register(self.nib, forCellReuseIdentifier: self.identifier)
    }

    и вызывать его при инициализации на ших контроллеров. Таким образом вы избежите дублирования кода и повысите его инкапсуляцию.


Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории