Контроллер Model View: Контроллер или Модель извлекают данные с сервера? - PullRequest
12 голосов
/ 17 июля 2011

Например: допустим, я собираю список имен и сохраняю его в NSMutableArray. Я реализую метод фактического вызова сервера для извлечения данных в контроллере (UIViewController) или модели (объект Friends)?

Ответы [ 6 ]

8 голосов
/ 17 июля 2011

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

С другой стороны, если вы просто получаете файл с сервера, и на этом всеможет иметь смысл осуществлять связь в контроллере.Контроллеры, как правило, менее пригодны для повторного использования и более адаптированы к конкретному поведению приложения.Учет особенностей получения данных из модели делает модель более пригодной для повторного использования.Это также облегчает тестирование - вы можете написать тестовый код, который просто читает локальный файл и сохраняет данные в модели.

0 голосов
/ 11 февраля 2014

Я бы лично создал DAO, или класс помощника по данным.Очень сложно следовать строгому MVC в цели C, когда все становится сложнее.Тем не менее, указав это в модели или в VC, это не так.

0 голосов
/ 15 января 2014

Я использую шаблон MVCS (Model-View-Controller-Store), который я обнаружил в книге Аарона Хиллегаса "Программирование на IOS: Руководство по ранчо большого ботаника" (http://www.bignerdranch.com/book/ios_programming_the_big_nerd_ranch_guide_rd_edition_)

)

Хранилище специально разработано для извлечения данных, будь то с сервера, локального файла, постоянной коллекции, базы данных и т. Д.

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

Это очень похоже на шаблон репозитория (http://msdn.microsoft.com/en-us/library/ff649690.aspx) (см. Ответ BobTurbo)

0 голосов
/ 17 июля 2011

Один из подходов заключается в использовании шаблона хранилища. Для этого вы создаете объекты репозитория в папке Model и помещаете в них все методы, связанные с базой данных. Ваши контроллеры вызывают классы хранилища для получения данных. Это позволяет отделить объекты реальной модели от методов доступа к базе данных.

0 голосов
/ 17 июля 2011

Я думаю, вы хотите поместить это в модель.Что вы будете делать, это опросить модель для данных, а затем модель обработает, как заполнить себя, будь то из внутреннего хранилища данных или внешнего (например, сервера).

0 голосов
/ 17 июля 2011

Хороший вопрос. Я думаю, что лучший способ - через контроллер, потому что он отделяет вашу модель от необходимости наличия другой модели, чтобы он работал правильно. Хотя я не думаю, что вы нарушаете "надлежащий mvc", делая это и в модели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...