Intereting Posts
Как использовать `readableContentGuide` с аксессуаром в пользовательской ячейке? Удаление правильных диспетчеров просмотра из навигационного стека Как получить доступ к видео в iPhone, синхронизированном через iTunes с ПК Swift: не удалось импортировать заголовок моста как переименовать файл, который мой проект ios находится в моей ОС Сбой iOS VoiceOver (сообщение отправлено на освобожденный экземпляр) ACAccountStore requestAccessToAccountsWithType: options: завершение всегда показывает запрос на разрешения Привлечь две массы друг к другу w / UIKit Dynamics Изображения, совместимые со всеми iPads? Попытка сделать простой запрос JSON в Objective-C (IOS7) Когда вызываются методы UITableViewDataSource? Как проверить, зашифрован ли файл Data Data SQLlite? Как я могу сделать свои бомбы быстрее или быстрее или быстрее, чем дольше длится игра? Странная ошибка в UITableView NSInvalidArgumentException: , когда она не равна нулю Как обмениваться фотографиями с SnapChat из моего родного приложения iOS?

Должен ли я загружать информацию в контроллер или класс данных?

Мое приложение загружает фотографии с веб-сервера. Загружает ли информацию о фотографиях из бизнеса или бизнеса сервера Controller? Я хочу загрузить данные в класс контроллера

Photo.title = [self getPhotoInfoFromServer: url]; 

или в классе данных?

 [Photo getPhotoInfoFromServer: url]; 

Глобальная точка зрения

UIViewController предназначен для управления представлением. Это означает взаимодействие (дайте хорошие данные для представления и ответьте на просмотр взаимодействия).

Модель / сущность может быть создана независимыми источниками (если только сам источник семантически не связан с вашей моделью). Фото – это фотография, независимо от того, создан ли она из данных, полученных с сервера или с локального изображения Camera Roll.

Вы должны использовать собственный DataFetcherController для получения удаленных данных и преобразования его в экземпляр.

Пример потока

UIViewController subclass нужен список фотографий. Он запрашивает PhotoServerFetcherController для получения данных с сервера. Сборщик может заглянуть в свой кеш и выполнить запрос сервера, если это необходимо. Когда PhotoServerFetcherController получает данные и анализирует их на экземпляры вашего объекта Photo и возвращает его в UIViewController`.

Взаимодействия данных

Лучше всего создать собственный интерфейс @protocol ( @protocol слово @protocol ). Вы можете обрабатывать 2 асинхронных обратных вызова: success с данными в нем и failure с ошибкой в ​​нем (соединение? Плохой ввод?).

Здесь у вас есть много способов реализовать это, основные 2 шаблона для от 1 до 1 взаимодействий – delegate или block callbacks .

Вы должны загрузить фотографии в класс данных, а затем те, которые требуют, чтобы данные могли легко получить данные из класса данных. На самом деле вам следует следовать MVC, где

M = Modal (ваш класс данных)

C = класс контроллера

V = посмотреть, что отображает ваш контроллер

Я предпочитаю использовать выделенный класс сервера, который создает экземпляры моделей и используется с контроллера: [photoServer getPhotoFromURL:URL] или [photoServer getPhotoFromURL:URL completion:^(Photo *photo, NSError *error){...}]

Почему выделенный серверный класс?

  • фотографии могут поступать из нескольких источников, и вы не хотите писать много методов +[Photo getPhotoFrom...] и препятствовать повторному использованию и поддерживаемости вашего класса Photo.
  • Всякий раз, когда изменяется реализация сервера, вам просто нужно изменить один класс, класс, который отвечает за сервер. Модель фото не знает, что есть даже сервер, и это не связано с реализацией сервера. Это принцип единой ответственности в действии.

Почему этот код должен вызываться из контроллера?

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