Применение философии MVC в Objective C - PullRequest
1 голос
/ 14 февраля 2012

Я начинаю небольшой проект, в котором на экране отображаются круги со случайными радиусами, случайным цветом и случайным положением. Я хочу реализовать это, используя парадигму MVC в Objective C.

У меня есть класс Circle , который содержит следующие переменные экземпляра:

  • CGFloat радиус
  • CGPoint центр
  • UIColor radiusColor

Этот класс не содержит методов, он просто содержит данные. Это помещено в отдельный файл. (Circle.m & Circle.h)

У меня есть класс myModel , который должен быть моделью для моего MVC. Он содержит методы, которые случайным образом генерируют центры внутри границ моего представления, где связанные размеры запрашиваются из представления по всему контроллеру.

Каждый раз, когда генерируется случайное свойство (то есть центр, цвет и радиус), экземпляр класса Circle создается в классе myModel и сохраняется в NSMutableArray. Когда генерация завершена, этот NSMutableArray передается контроллеру, который, в свою очередь, передает его представлению, отображая таким образом круги.

Мой вопрос таков: если я хочу правильно реализовать парадигму MVC, следует:

  1. Модель ( myModel ) содержит экземпляры Circle , или экземпляры Circle должны храниться контроллером?
  2. Моя модель должна быть сделана из одного класса, или это законно, чтобы быть сделанным из нескольких классов?
  3. Модель знает ограниченный размер представления или это что-то, что является нарушением в философии MVC?

Последний вопрос. Если я сделал реализацию, как я уже говорил выше, являются ли myModel и Circle отдельными моделями или оба класса составляют одну модель?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 14 февраля 2012

[Следует] Модель (myModel) содержит экземпляры Circle или экземпляры Circle должны удерживаться контроллером?

Модель должна содержать данные. Это работа. Представьте, что произойдет, если вы захотите изменить интерфейс вашей программы. Вместо (или в дополнение к) рисования кругов на экране вы можете отобразить список кругов и их расположения. Возможно, вы захотите изменить или заменить контроллер представления, чтобы сделать это, но вам не нужно менять модель, в которой хранятся круги. Точно так же вы можете изменить способ создания кругов, но продолжайте отображать их такими, какие вы есть сейчас. В этом случае вы бы изменили модель, но контроллер вида и вид, вероятно, могли бы остаться прежними.

[Должен ли] моя модель быть сделана из одного класса, или это законно, чтобы быть сделанным из нескольких классов?

Модель данных, как правило, представляет собой целый граф объектов, очень часто разных типов. У вас может быть один объект, который управляет остальными (хотя вам и не обязательно). Например, ваш класс MyModel содержит массив, в котором хранятся объекты Circle. Вы можете добавлять квадратные объекты, групповые объекты и т. Д.

[Следует] Модель знает размер привязанного вида или это что-то, что является нарушением философии MVC?

Модель не должна знать конкретно о представлении, но для контроллера представления вполне нормально сказать ему создавать круги в заданном диапазоне координат. Таким образом, если представление меняет размер или ориентацию, контроллер представления, вероятно, узнает об этом и может, в свою очередь, предоставить модели новую информацию.

1 голос
/ 14 февраля 2012
  1. Если в вашей модели есть другие компоненты, кроме кругов, оберните все в myModel.Даже если вы этого не сделаете, вы все равно можете сделать это, чтобы учесть будущие дополнения.
  2. Зависит от вашего дизайна.Если вы пишете приложение на основе документов (независимо от того, используете ли вы UIDocument), у вас обычно будет один класс, содержащий другие.Даже если это не так, обычно удобно иметь один корневой класс для целей архивирования и т. Д.
  3. Модель определенно не должна ничего знать об иерархии представлений.(Обратите внимание, что это отличается от знания чего-то вроде «размера холста» - было бы правомерно хранить такое свойство в модели и позволять представлению отображать холст так, как ему хочется, например, в UIScrollView.)

Кстати, спасибо, что думали об этом раньше времени!

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