MVC с Objective-C.Где происходит форматирование данных для представления? - PullRequest
4 голосов
/ 27 марта 2012

Я работаю над приложением для iPhone и стараюсь максимально соответствовать MVC (я все еще учусь).У меня есть целое число без знака в моей модели данных, которое представляет количество секунд.Я хочу, чтобы это отображалось в виде в формате «00: 00» (минуты: секунды).Мой вопрос: где это форматирование?Является ли обязанностью модельного объекта предоставить его в этом формате?Отформатирует ли контроллер это после извлечения его из модели, но перед передачей его в представление?Или представление обрабатывает форматирование?

Спасибо за любую помощь.

Ответы [ 2 ]

4 голосов
/ 27 марта 2012

Если это форматирование используется только в одном месте, лучшее решение - поместить форматирование в представление, и этот подход часто работает довольно хорошо. Однако, если у вас нет собственного представления, естественно поместить эту работу в контроллер представления. В версии MVC Cocoa контроллеры представлений имеют широкие возможности управления ими. (Это значительное место, в котором MVC Cocoa отличается от MVC SmallTalk, на котором он основан.)

Но что, если вы хотите использовать одинаковое форматирование для представлений (или контроллеров представлений)? Затем вы выделяете код форматирования в подкласс NSFormatter (или используете существующий NSDateFormatter в вашем случае). Вы можете раздать их, поместить в ивары или даже создать синглтон для их удержания.

Почему бы просто не поместить это в модель в этом случае? Хорошо, скажем, у вас есть четыре представления, которые показывают время таким образом, но затем вы добавляете два других представления, которые показывают время как 00: 00.0, и затем есть одно представление аккумулятора, которое показывает часы и минуты. Теперь вы должны продолжать расширять модель для обработки этих случаев. Модель собирает все больше и больше информации о видах. Сохранение форматирования в устройстве форматирования позволяет обмениваться кодом (и исправлениями ошибок), не загрязняя модель этими деталями. А представления, которые имеют особые потребности в форматировании, могут по-прежнему иметь собственный код.

Нет необходимости создавать отдельные NSFormatter подклассы для каждого вида форматирования. Вы можете создать отдельный класс MYObjectFormatter, который принимает такие параметры, как «часы», «минуты», «секунды» и т. Д. Он будет работать так же, как NSDateFormatter в этом отношении, и даст простоту использования, которая вам нужна, в то время как сохранить ваш код форматирования вне модели. Именно так разделены NSDate и NSDateFormatter.

1 голос
/ 27 марта 2012

Вы, вероятно, столкнетесь с рядом мнений по этому вопросу.

По сути, поскольку он чисто презентационный, я бы поместил его в слой View;логики управления нет, все дело в форматировании существующих данных для отображения.

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