MVC, владелец коллекции в модели или контроллер? - PullRequest
1 голос
/ 31 января 2012

Этот вопрос является концептуальным, вокруг паттерна MVC в ООП.Вот сюжет: мы находимся в приложении с богатым клиентом, которое работает с веб-сервисом REST.Мы делаем запрос GET к ресурсу на сервере, сервер возвращает ответ в формате XML.Ответ похож на RSS-канал.Клиентскому приложению необходимо проанализировать и отобразить этот XML в удобочитаемом моде.

Я создал объект модели, который в основном отражает таблицу базы данных сервера, у меня также есть парсер и контроллер представления (и, очевидно, представление).

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

Когда синтаксический анализатор завершил синтаксический анализ XML, он уведомляет контроллер представления, затем контроллер представления считывает каждый элемент коллекции и создает представление.

Вот мои вопросы.

  1. Это хорошая реализация?
  2. Я думаю, что владелец коллекции должен быть моделью непосредственно, поэтому контроллер представления запрашивает модель для начала анализа, а анализатор вместо этого уведомляет модель.контроллера представления, и, наконец, модель отправляет коллекцию обратно контроллеру представления.Это лучше?
  3. Должен ли я объединить модель и анализатор?

Ответы [ 2 ]

2 голосов
/ 31 января 2012

Вот несколько моментов относительно вашего вопроса:

  1. MVC поставляется в вариациях.Не существует строгого правила относительно того, должна ли Модель или Контроллер уведомлять представление об изменении состояния или событии.Все зависит от специфики применения.
  2. Связь между Parser и View, как вы ее описали вначале, вероятно, не является правильным способом сделать это.Лучше, чтобы представление получало заполненную коллекцию, а не связывалось назад и вперед с парсером для его создания.Это не работа View.Кроме того, не рекомендуется распределять одну функцию (например, создавать коллекцию) по нескольким компонентам.
  3. Следует ли включать в модель синтаксический анализ или иметь отдельный компонент, анализатор?Я предлагаю вам думать о модели изолированно от других частей приложения (например, что представление должно отображать ее и т. Д.).В этой изоляции посмотрите, не относится ли разбор к модели.Если так, то включите его в модель.Иначе, сделайте это отдельным компонентом.Я предполагаю, что он не принадлежит модели и должен быть отдельным компонентом.
0 голосов
/ 31 января 2012

Модель, как правило, не создает себя.Контроллер вызывает хранилище, которое возвращает один или несколько объектов из модели.Вы можете прочитать больше о хранилище pattern .

...