Открыть список
Как стать автором
Обновить

Пара различий между полем объекта данных и свойством Java Bean

Чулан
Демонстрируется пример объявления и использования поля объекта данных (java-проект «Модель данных» — fishbolt.org/java/org.fishbolt.model/doc/article.ru.html ). Приводится сравнение с Java Beans, объясняются преимущества.

В модели, поле объекта данных представлено интерфейсом IDataField. Параметр этого интерфейса определят тип значения поля.
Интерфейс содержит методы setValue и getValue, которые используются для установки и чтения значения поля, соответственно. Так, например, значение поля IDataField<Integer> будет устанавливаться с помощью метода setValue(Integer) и извлекаться с помощью вызова getValue() (возвращаемый тип Integer).
Время жизни экземпляра поля IDataField совпадает со временем жизни экземпляра объекта данных (IDataObject), в котором поле содержиться. Т.е., значение поля объекта данных может многократно меняться в поле данных объекта, однако экземпляр поля данных ( IDataField) у объекта данных никогда не меняется.

В объекте данных (т.е. объекте типа IDataObject), поле объявляется как константа:

final static FieldDeclaration<String> name = new FieldDeclaration<String>();
Предположим, что наш объект данных называется Department.
Cослаться на поле данных можно указанием константы Department.name. Объявление этой константы в объекте данных определяет наличие соответствующего поля данных (IDataField) у экземпляра. Константа используется для получения значения поля — в базовом интерфейсе объекта данных (интерфейс IDataObject) объявлен метод:

<T> IDataField<T> getDataField(FieldDeclaration<T> declaration) ;

Получить значение поля, представленного константой name, можно следующим образом:

Department d = ...;

IDataField<String> dataField = d.getDataField(Depatment.name);
String name = dataField.getValue();

Или можно использовать сокращённый вызов при помощи вспомогательного класса ModelUtil:

String name = ModelUtil.getValue(d, Depatment.name);

Сравнивая поле объекта данных со свойством Java-бина можно сказать, что технология Java Beans не выделяет свойство экземпляра бина в отдельный объект, то есть, нет объекта, который заворачивает в себе значение свойства бина и “живёт” вместе с бином. Такой объект, конечно, неявно присутствует в уме разработчика как пара имя свойстваэкземпляр бина. К сожалению, наличие такого объекта лишь в уме разработчика не позволяет ссылаться на объект в коде.

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

Полагаю, для части читателей настал момент усомниться в необходимости объекта-завёртки значения поля. Одним из наиболее весомых аргументов против является повышенный расход памяти по сравнению с Java Beans. Противовесом является то самоописание и простота представления единицы информации (значении поля), которые позволяют легко создавать большее количество повторно используемых компонентов, взаимодействующих с информацией.

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

Наглядным примером такого механизма является проект «Пользовательский интерфейс модели данных в среде Eclipse» fishbolt.org/eclipse/org.fishbolt.model.eclipse/doc/plugin.article.ru.html. В этом проекте связь данных с компонентами пользовательского интерфейса осуществляется именно таким декларативным способом.
Теги:Javajava beansмодельстартапы
Хабы: Чулан
Всего голосов 3: ↑1 и ↓2 -1
Просмотры581

Комментарии 10

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

Похожие публикации

Java developer
от 150 000 до 300 000 ₽EmphasoftСанкт-Петербург
Разработчик java
от 300 000 ₽Банк «Открытие»Москва
Java разработчик
от 150 000 до 230 000 ₽KOTELOVСанкт-Петербург
Java Developer
от 160 000 до 190 000 ₽SCHNEIDER GROUPСанкт-Петербург
Java-разработчик
от 180 000 ₽Fuzzy Logic LabsМоскваМожно удаленно

Лучшие публикации за сутки