Когда следует и не следует расширять класс, и действительно ли он для MVC? - PullRequest
1 голос
/ 15 декабря 2010

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

Это мой план:

  • класс модели
  • контроллер расширяет модель
  • новый контроллер ();
  • новый вид (контроллер);

Причина: Я могу сделать все методы и переменные, к которым представление не должно касаться или изменять защищенными (т.е. защищенный var myVar: String).Это позволяет мне гарантировать, что представление по-прежнему имеет доступ к необходимым данным, но не может вносить случайные изменения.

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

Подводя итог:

  • Когда должен быть расширен класс?Когда этого следует избегать?
  • Является ли мой план действительной реализацией MVC?
  • Есть ли лучший способ отключить представление таким образом, чтобы это отвечало моим требованиям?

Спасибо, что дочитали до конца.

Ответы [ 2 ]

1 голос
/ 15 декабря 2010

Контроллер не должен расширять модель - они выполняют две разные вещи в триаде MVC и, следовательно, должны быть двух разных классов. Действительной причиной для расширения класса Model является добавление к нему дополнительной функции, например BigModel

Вот краткое изложение каждой части структуры MVC

  • Модель управляет поведением и данными домена приложения
  • Представление превращает модель в форму, удобную для взаимодействия, обычно это элемент пользовательского интерфейса
  • Контроллер получает входные данные и инициирует ответ, вызывая объекты модели.
0 голосов
/ 16 декабря 2010

Ваш вид не будет иметь доступа к защищенным методам модели / контроллера. Защищенный не означает только чтение, это означает, что только классы, которые расширяют базовый класс, могут получить доступ к защищенным свойствам или методам.

Чтобы иметь в вашей модели атрибуты только для чтения, вы должны посмотреть, используя закрытые / защищенные свойства, а затем создать публичную функцию получения для каждого свойства (свойство может быть прочитано, но не установлено).

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

Контроллер обычно не делает ничего другого, кроме прослушивания и отправки событий / уведомлений, иногда для небольших проектов вы можете заставить свой класс Model (Singleton) расширить EventDispatcher и заставить его делать почти все, что вы хотите, но это не так. чистый MVC и может быстро привести к технической задолженности, если масштаб проекта увеличивается.

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