Если это форматирование используется только в одном месте, лучшее решение - поместить форматирование в представление, и этот подход часто работает довольно хорошо. Однако, если у вас нет собственного представления, естественно поместить эту работу в контроллер представления. В версии MVC Cocoa контроллеры представлений имеют широкие возможности управления ими. (Это значительное место, в котором MVC Cocoa отличается от MVC SmallTalk, на котором он основан.)
Но что, если вы хотите использовать одинаковое форматирование для представлений (или контроллеров представлений)? Затем вы выделяете код форматирования в подкласс NSFormatter
(или используете существующий NSDateFormatter
в вашем случае). Вы можете раздать их, поместить в ивары или даже создать синглтон для их удержания.
Почему бы просто не поместить это в модель в этом случае? Хорошо, скажем, у вас есть четыре представления, которые показывают время таким образом, но затем вы добавляете два других представления, которые показывают время как 00: 00.0, и затем есть одно представление аккумулятора, которое показывает часы и минуты. Теперь вы должны продолжать расширять модель для обработки этих случаев. Модель собирает все больше и больше информации о видах. Сохранение форматирования в устройстве форматирования позволяет обмениваться кодом (и исправлениями ошибок), не загрязняя модель этими деталями. А представления, которые имеют особые потребности в форматировании, могут по-прежнему иметь собственный код.
Нет необходимости создавать отдельные NSFormatter
подклассы для каждого вида форматирования. Вы можете создать отдельный класс MYObjectFormatter
, который принимает такие параметры, как «часы», «минуты», «секунды» и т. Д. Он будет работать так же, как NSDateFormatter
в этом отношении, и даст простоту использования, которая вам нужна, в то время как сохранить ваш код форматирования вне модели. Именно так разделены NSDate
и NSDateFormatter
.