Если свойства соответствуют типам своих значений, привязки относятся к отдельным компонентам Swing. Объекты экранов создают свои компоненты, а затем регистрируют привязки для своих свойств к свойствам нижележащих объектов Form. Объект экрана не знает конкретный тип формы, с которой работает, – равно как и форма не знает конкретный тип экрана, с которым она связана.
Большинство привязок обновляет свои свойства при каждом изменении GUI. Текстовые поля, например, обновляются при каждом нажатии клавиши. Мы используем возможность оперативной проверки для предоставления постоянной, информативной обратной связи – вместо того, чтобы подождать, пока пользователь введет кучу неправильных данных и выдать гневное диалоговое окно.
Привязки также обеспечивают преобразование типа объекта свойства в разумное визуальное представление для соответствующих виджетов. Таким образом, привязка текстового поля знает, как преобразовывать целые числа, логические величины и даты в текст (и обратно). Впрочем, не каждая привязка способна обработать любой тип значения.
Например, не существует осмысленного преобразования графического свойства в текстовое поле. Мы позаботились о том, чтобы любые несоответствия перехватывались при запуске приложения.
Первый интересный момент обнаружился после того, как построили начальную версию инфраструктуры привязки свойств. Сначала мы опробовали ее на форме регистрации посетителей. Процесс регистрации весьма прямолинеен – пара текстовых полей, один флажок и несколько кнопок. Второй экран – альбомный – выглядит более эффектно и интерактивно. На нем размещается несколько виджетов: два эскиза, большой редактор изображения, ползунок и несколько кнопок. Даже здесь форма принимает решения относительно выделения, видимости и доступности виджетов исключительно на основании своих свойств. Таким образом, альбомная форма знает, что выделение эскизов влияет на центральный графический редактор, но объекту экрана об этом не известно. «Неведение» экранов помогает устранить ошибки синхронизации GUI и значительно расширяет возможности модульного тестирования.
Related posts: