Академический Документы
Профессиональный Документы
Культура Документы
Лабораторная работа №24 Шаблон MVC
Лабораторная работа №24 Шаблон MVC
1
Шаг 2. Используя шаблон Наблюдатель, добиться еще большей независимости
модели, а также синхронизации пользовательских интерфейсов
На этом шаге преследуется две цели:
1. Добиться еще большей независимости модели.
2. Синхронизировать пользовательские интерфейсы.
Понять, что подразумевается под синхронизацией пользовательских интерфейсов,
поможет следующий пример. Предположим, мы покупаем билет в кино через интернет и видим
количество свободных мест в кинотеатре. Одновременно с нами покупать билет в кино может
кто-то еще. Если этот кто-то купит билет раньше нас, нам бы хотелось увидеть, что количество
свободных мест на наш сеанс уменьшилось. А теперь поразмышляем о том, как это может быть
реализовано внутри программы. Предположим, у нас есть ядро системы (наша модель) и
интерфейс (веб страница, на которой мы осуществляем покупку). На сайте 2 пользователя
одновременно выбирают место. Первый пользователь купил билет. Второму пользователю
необходимо отобразить на странице эту информацию. Как это должно произойти? Если мы из
ядра системы будем обновлять интерфейс, наше ядро, наша модель, будет зависима от
интерфейса. При разработке и тестировании модели придется держать в голове различные
способы обновления интерфейса. Чтобы достичь этого, необходимо реализовать шаблон
Наблюдатель. С его помощью модель рассылает уведомления об изменениях всем подписчикам.
Интерфейс, являясь таким подписчиком, получит уведомление и обновится. Шаблон
Наблюдатель позволяет модели с одной стороны информировать интерфейс (вид и контроллер)
о том, что в ней произошли изменения, а с другой — фактически ничего о них “не знать”, и тем
самым оставаться независимой. С другой стороны, это позволит синхронизировать
пользовательские интерфейсы.
Шаг 3. Разделение интерфейса на Вид и Контроллер
Дальнейшее деление приложения на модули на более низком уровне иерархии. На этом
шаге пользовательский интерфейс (который был выделен в отдельный модуль на шаге 1)
делится на вид и контроллер. Сложно провести строгую черту между видом и контроллером.
Если говорить о том, что вид — это то, что видит пользователь, а контроллер — это механизм,
благодаря которому пользователь может взаимодействовать с системой, можно обнаружить
некоторое противоречие. Элементы управления, например, кнопки на веб-странице или
виртуальная клавиатура на экране телефона, это по сути часть контроллера. Но они так же
видны пользователю, как и любая часть вида. Здесь скорее речь идет о функциональном
разделении. Основная задача пользовательского интерфейса — обеспечить взаимодействие
пользователя с системой. Это означает, что у интерфейса всего 2 функции:
выводить и удобно отображать пользователю информацию о системе;
вводить данные и команды пользователя в систему (передавать их системе);
Данные функции и определяют то, как нужно делить интерфейс на модули. В итоге,
архитектура системы выглядит так:
2
В итоге имеем приложение из трех модулей: Модель, Вид и Контроллер. Резюме:
1. Следуя принципам MVC, систему нужно разделять на модули.
2. Самым важным и независимым модулем должна быть модель.
3. Модель — ядро системы. Нужна возможность разрабатывать и тестировать ее
независимо от интерфейса.
4. Для этого на первом шаге сегрегации системы нужно разделить ее на модель и
интерфейс.
5. Далее, с помощью шаблона Наблюдатель, укрепляем модель в ее независимости и
получаем синхронизацию пользовательских интерфейсов.
6. Третьим шагом делим интерфейс на контроллер и вид.
7. Всё, что на ввод информации от пользователя в систему — это в контроллер.
8. Всё, что на вывод информации от системы к пользователю — это в вид.
3
Ход работы
Контрольные вопросы