Курсовые - Организация работы деканата

Архитектурный шаблон проектирования MVC

4. АРХИТЕКТУРНЫЙ ШАБЛОН ПРОЕКТИРОВАНИЯ MVC

4.1 Общее описание шаблона проектирования MVC


 

Model-View-Controller (MVC, «Модель-Представление-Контроллер», «Модель-Вид-Контроллер») — схема разделения данных приложения, пользовательского интерфейса и управляющей логики на три отдельных компонента: модель, представление и контроллер — таким образом, что модификация каждого компонента может осуществляться независимо:

  • Модель (Model) предоставляет данные и реагирует на команды контроллера, изменяя своё состояние;

  • Представление (View) отвечает за отображение данных модели пользователю, реагируя на изменения модели;

  • Контроллер (Controller) интерпретирует действия пользователя, оповещая модель о необходимости изменений.

Основная цель применения этой концепции состоит в отделении бизнес-логики (модели) от её визуализации (представления, вида). За счёт такого разделения повышается возможность повторного использования кода. Наиболее полезно применение данной концепции в тех случаях, когда пользователь должен видеть те же самые данные одновременно в различных контекстах и/или с различных точек зрения. В частности, выполняются следующие задачи:

  1. К одной модели можно присоединить несколько видов, при этом не затрагивая реализацию модели. Например, некоторые данные могут быть одновременно представлены в виде электронной таблицы, гистограммы и круговой диаграммы;

  2. Не затрагивая реализацию видов, можно изменить реакции на действия пользователя (нажатие мышью на кнопке, ввод данных) — для этого достаточно использовать другой контроллер;

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

Концепция MVC позволяет разделить модель, представление и контроллер на три отдельных компонента:


 

Рисунок 4.1 – Общая схема взаимодействия компонентов шаблона MVC

Модель предоставляет данные и методы работы с ними: запросы в базу данных, проверка на корректность. Модель не зависит от представления (не знает как данные визуализировать) и контроллера (не имеет точек взаимодействия с пользователем) , просто предоставляя доступ к данным и управлению ими.

Модель строится таким образом, чтобы отвечать на запросы, изменяя своё состояние, при этом может быть встроено уведомление «наблюдателей».

Модель, за счёт независимости от визуального представления, может иметь несколько различных представлений для одной «модели».

Представление отвечает за получение необходимых данных из модели и отправляет их пользователю. Представление не обрабатывает введённые данные пользователя.

Контроллер обеспечивает «связь» между пользователем и системой. Контролирует и направляет данные от пользователя к системе и наоборот. Использует модель и представление для реализации необходимого действия.

Функциональные возможности и расхождения

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

Некоторые фреймворки жестко задают где должна располагаться бизнес-логика, другие не имеют таких правил.

Также не указано, где должна находиться проверка введённых пользователем данных. Простая валидация может встречаться даже в представлении, но чаще они встречаются в контроллере или модели.

Интернационализация и форматирование данных также не имеет четких указаний по расположению.


 


 


 

4.2 Применение шаблона проектирования MVC в программе


 

В программе данный шаблон реализован как набор классов для работы с таблицами базы данных.

Компонент «View» шаблона проектирования MVC в программе представляет встроенный Java-класс Jtable.

Jtable - класс библиотеки Java Swing, предназначенной для создания графического интерфейса. Он является одним из основных компонентов, обеспечивающих работу шаблона MVC в программе. Jtable создает таблицу исходя из того, какой объект находится в поле Model этого класса. Это поле может быть объектом любого класса, наследующего класс TableModel.

Компонент «Model» шаблона проектирования MVC в программе представляет встроенный Java-класс TableModel.

TableModelбазовый класс для создания модели для представления. Класс, наследующий класс TableModel должен обязательно переопределять следующие методы:

  1. void add(Object value) — метод добавления данных в модель;

  2. int getColumnCount() – метод необходимый классу представления для получения количества столбцов в модели;

  3. boolean isCellEditable – позволяет получить, является ли столбец с заданным номером редактируемым. Если метод возвращает true – то в графическом представлении таблицы возможно напрямую изменять данные строк Jtable в этом столбце, если нет то прямое редактирование недоступно. В настоящей программе прямое редактирование запрещено для всех столбцов, для этого созданы специальные формы;

  4. getRowCount() – позволяет получить количество строк в модели;

  5. getColumnClass(int columnIndex) – позволяет получить класс столбца модели;

  6. set<TableModelListener> listeners – «прослушки», именно эти объекты уведомляют модель из представления о том, что какие-то данные изменились, таким образом связывая модель и представление;

  7. getValueAt(int rowIndex, int columnIndex) – позволяет представлению получить данные по заданным строке и столбцу.

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

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

В целом, класс модели может быть абсолютно любым, а как будут данные добавляться, выводится, удалятся и изменяться — дело программиста.

Далее была создана общая диаграмма классов для хорошего видения всей картины. Рисунок 4.2 – Диаграмма классов


 

Основными и базовыми классами для моделей таблиц являются классы BaseDbTable и BaseDbRow. BaseDbRow — абстрактный класс, хранящий набор базовых методов, которые должна реализовывать строка модели таблицы. В классе BaseDbTable определены все основные методы и поля для работы с таблицами, переопределены методы класса TableModel. Сам класс является абстрактным, т.е создать объект этого класса нельзя, он представляет собой базовый набор общих функций для таблиц данных. Некоторые из них являются полностью универсальными, и будут одинаковые при работе с любой таблицей, некоторые нужно будет переопределить. Также он содержит коллекцию типа List<BaseDbRow> records, в ней будут храниться все строки модели, с этой коллекцией будут взаимодействовать методы редактирования и получения данных.

Классы DecanModel, EkzamTable, EkzstTable, GroupModel, KafedraTable, SemestrTable, StudentTable являются наследниками класса BaseDbTable. И уже содержат весь необходимый функционал для взаимодействия с представлением, но помимо этого, в нем определено количество столбцов и конкретный тип данных, хранящийся в коллекции records. Стоит отметить, создание базового абстрактного класса и создание нескольких конкретных его реализаций — пример шаблона проектирования «Абстрактная фабрика», описание применения этого шаблона в программе будет приведено далее в 5 главе.

В интерфейсе одновременно существуют несколько страниц представлений. Программа представляет собой 1 (одно) основное окно с главным меню вверху, и кнопками «Добавить», «Изменить», «Удалить» внизу. Остальное место окна занимает объект графической библиотеки Swing – Jframe. Именно здесь будет находиться страница с данными — currentPage класса framePage.

Класс framePage нужен для более удобной работы с таблицей и объединяет в себе таблицу, полосу прокрутки и панель в 1 (одном) объекте.

В главном классе интерфейса — modFrame – поле currentPage содержит активный объект framePage, также содержится ряд дополнительных объектов этого класса – страницы приложения, по командам пользователя активная страница может сменяться.

За счет использования шаблона MVC, Jtable может содержать в себе любую модель, никакой логики кроме графической отрисовки таблицы данный класс не выполняет. Все необходимые операции, в том числе обеспечение представления информацией о том, что необходимо выводить в интерфейс, выполняет класс модели — один из наследников класса BaseDbTable.

Далее было разработано несколько диаграмм последовательности для лучшего представления работы шаблона MVC в программе.

  • Диаграмма последовательности при работе MVC шаблона на просмотр данных модели на примере таблицы «Деканат»:

     

  • Диаграмма последовательности при смене модели для Jtable:

     

  • Диаграмма последовательности при добавлении данных на примере таблицы «Деканат»:


 

 

 


 

 

Количество комментариев: 0

Для того, чтобы оставить коментарий необходимо зарегистрироваться