Идентификация архитектурных решений и механизмов
В процессе проектирования определяются детали реализации архитектурных механизмов, обозначенных в процессе анализа. Поскольку практически все механизмы — это некоторые типовые решения (образцы), они документируются в проекте (модели) с помощью кооперации со стереотипом «mechanism», при этом структурная часть механизма описывается с помощью диаграмм классов, а поведение — с помощью диаграмм взаимодействия.
В качестве примера рассмотрим механизм хранения данных в БД. Предположим, что в проекте системы регистрации в качестве языка программирования используется .Java. Поскольку существующая система каталога курсов функционирует на основе реляционной СУБД, таким механизмом, обеспечивающим доступ к этой внешней базе данных, должен быть JDBC (Java Database Connectivity). На рис. 4.18 показана диаграмма классов образца, описывающего JDBC.
Рис. 4.18. Диаграмма классов кооперации, описывающей JDBC
Все классы, изображенные на данной диаграмме, можно разделить на две группы:
· Собственно классы JDBC (DriverManager, Connection, Statement, ResultSet), которые отвечают за реализацию запроса к БД (выполнение оператора SQL). Эти классы принадлежат к архитектурному уровню Middleware и входят в соответствующий пакет.
· Классы со стереотипом <<role>>, являющиеся «заполнителями» (placeholders) реальных классов, создаваемых разработчиком системы. Они выполняют следующее назначение:
DBClass — отвечает за чтение и запись данных. Класс такого типа создается для каждого устойчивого (persistent) класса, или, иначе говоря, класса, данные которого будут храниться в некоторой БД (в данном случае — в таблицах реляционной БД). Например, в системе регистрации на курсы в процессе анализа в соответствии с образцом Information Expert определено, что класс-сущность Course должен отвечать за сохранение информации об учебных курсах в базе данных. Однако при этом, как было сказано в данном образце, возникает проблема перегруженности класса лишними обязанностями, поскольку класс Course должен непосредственно содержать вызовы сервисов JDBC. Разделение основных функций системы на уровни (применение образца «Уровни») в данном случае означает, что обязанности взаимодействия с БД выносятся из класса Course в класс DBCourse.
PersistencyClient — класс, запрашивающий создание, чтение, обновление или удаление данных.
PersistentClass — класс-сущность, объекты которого содержат необходимые данные.
PersistentClassList — список объектов, являющихся результатом запроса к БД — выполнения операции DBClass.read().
Выполнение операций, реализуемых механизмом JDBC (операций класса DBClass), документируется с помощью диаграмм взаимодействия. Одна из таких диаграмм — кооперативная диаграмма, показывающая выполнение операции создания новых данных (create), приведена на рис. 4.19.
Из диаграммы на рис. 4.19 видно, что для создания новых данных (нового класса) объект PersistencyClient. запрашивает DBClass. DBClass создает новый объект PersistentClass и загружает в него данные. Затем DBClass создает новый оператор SQL, используя операцию createStatement() класса Connection. В результате выполнения этого оператора данные помещаются в БД.
Рис. 4.19. Диаграмма выполнения операции create