BOLD - инструмент реализации MDA в Delphi


OCL и графический интерфейс


Поставим следующую задачу: отображать в метке BoldLabel1 название страны, где проживает текущий автор, выбранный в списке авторов BoldGrid1 (рис. 2).

Обратите внимание, что метка BoldLabel1, как и любой другой визуальный компонент Borland MDA, имеет свойство BoldHandle. Из предыдущей статьи данного цикла нам известно, что в качестве источника данных для этого описателя целесообразно выбрать ListAllAvtors, что мы и сделаем. А в качестве OCL-выражения напишем вручную или введем во встроенном OCL-редакторе (напомним, что OCL-редактор вызывается при двойном щелчке по свойству Expression компонента ListAllAvtors) следующее выражение: «’Страна ‘+strana.nazvanie», где ‘Страна ’ — это текстовая константа, а «strana.nazvanie» — OCL-запрос для выбора страны для текущего автора и выбора атрибута «название» класса «’Страна’ — nazvanie» для отображения его на нашей форме. Как видим, это делается весьма просто. Встроенный в Borland MDA механизм обеспечит при этом автоматическое изменение текста метки при изменении текущего автора в компоненте BoldGrid1. На этом моменте стоит остановиться подробнее — как уже упоминалось ранее, одним из важных механизмов, встроенных в Borland MDA, является механизм так называемой подписки на события (subscribing). Рассмотрим работу данного механизма.

В нашем случае, связав свойство BoldHandle метки с описателем списков авторов ListAllAvtors, мы «сообщили» среде Borland MDA, что необходимо «подписать» нашу метку на события, возникающие при любых изменениях списка авторов, в том числе и на события, возникающие при переходах от одного объекта к другому при перемещении по списку авторов. Кроме того, мы сформировали OCL-запрос, который должен быть выполнен при наступлении такого события, с указанием конкретной необходимой нам информации (название страны, где проживает автор). Остальное среда Borland MDA сделает самостоятельно, то есть по наступлению события, связанного с изменениями в списке авторов, проверит, есть ли элементы, подписавшиеся на изменение этого списка, и, если таковые имеются, выполнит соответствующий OCL-запрос, а также вернет полученные данные подписанному элементу для дальнейшего использования (в данном случае — для отображения на форме). Отметим, что в данном случае «подписку» незаметно для нас «оформила» сама среда, но это совсем не обязательно. Разработчик может и самостоятельно «подписать» любой Bold-элемент на необходимое событие, воспользовавшись специальными методами класса TboldElement.

Читатель вправе спросить, что же здесь нового. Мы знаем, что при традиционной разработке приложений с базами данных можно использовать визуальный компонент TDBLabel — метку, которая автоматически отслеживает и отображает на форме содержимое указанного поля таблицы БД при перемещении по сетке. Однако в нашем классе «Автор» отсутствует атрибут «Страна» и для решения этой задачи традиционными методами нужно было бы сформировать в общем случае SQL-запрос, который бы выбирал страну из другой таблицы для конкретного автора и связать метку с этим запросом. Кроме того, необходимо было бы специально «подключать» этот запрос к сетке либо к набору данных, чтобы он выполнялся при переходах между авторами. Мы же обошлись без подобных операций.

Аналогично проделаем операции по подключению Bold-меток BoldLabel2 (для отображения названия издательства книги) и BoldLabel3 (для отображения тематики книги). В качестве источника информации для этих меток выступает описатель списка книг ListAllBooks. После запуска приложения убеждаемся, что тексты меток отслеживают перемещение по списку книг, отображаемых в компоненте BoldGrid3.

В начало В начало



- Начало -  - Назад -  - Вперед -