Изучаем Java EE 7 - [35]

Шрифт
Интервал

Например, в типичном веб-приложении на уровне браузера применяется код JavaScript. Он обеспечивает простую валидацию данных в отдельных полях, а на уровне сервера проверяется соответствие более сложным бизнес-правилам. Нативные приложения, написанные на Java (Swing, мобильные приложения для Android), могут использовать весь потенциал этого языка при записи и валидации данных.

Интероперабельность

Зачастую корпоративные приложения должны обмениваться данными с внешними партнерами/системами. Такие приложения, относящиеся к категории «бизнес для бизнеса», получают информацию в любом формате, обрабатывают их, сохраняют и отправляют обратно партнеру. Валидация пользовательских (заказных) форматов — порой сложная и затратная задача. В настоящее время обмен данными между неоднородными системами обычно организуется на языке XML. Базы данных могут применять язык DDL для определения своей структуры. Аналогичным образом XML может использовать XSD (язык описания структуры XML-документа) для ограничения XML-документов. XSD выражает несколько правил, которым должен соответствовать XML-документ, чтобы удовлетворять выбранной схеме. Синтаксический разбор и валидация XML — распространенная задача, которая легко выполняется во многих фреймворках Java.

Обзор спецификации валидации компонентов

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

Валидация компонентов (Bean Validation) — это технология, ориентированная на Java, хотя и предпринимаются попытки интегрировать другие валидационные языки, в частности DDL или XSD. Валидация компонентов позволяет вам написать ограничение лишь однажды и использовать его на любом уровне приложения. Она не зависит от уровня, то есть одно и то же ограничение может использоваться повсюду, от уровня представления до уровня бизнес-модели. Валидация компонентов доступна как в серверных приложениях, так и в насыщенных графических клиентских интерфейсах, написанных на Java (Swing, Android). Такая валидация считается расширением объектной модели JavaBeans и, в принципе, может использоваться в качестве ядра других спецификаций (в этом вы убедитесь в следующих главах книги).

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

Краткая история валидации компонентов

Разработчики занимаются ограничением и валидацией создаваемых моделей с тех пор, как существует язык Java. Код и фреймворки сначала были кустарными, они породили определенные практики, которые стали применяться в первых свободных проектах. Так, еще в 2000 году валидация пользовательского ввода стала использоваться в Struts — знаменитом MVC-фреймворке для Сети. Но прошло еще некоторое время, прежде чем появились целые валидационные фреймворки, предназначенные исключительно для работы с Java (а не просто для обеспечения веб-взаимодействий). Наиболее известными из таких фреймворков являются, пожалуй, Commons Validator из Apache Commons и Hibernate Validator. Другие подобные фреймворки — iScreen, OVal, а также распространенный фреймворк Spring, в котором содержится собственный валидационный пакет.

Что нового появилось в версии Bean Validation 1.1

В настоящее время валидация компонентов в версии 1.1 интегрирована в Java EE 7. В этой младшей (корректировочной) версии появились многие новые возможности, были улучшены существующие. Рассмотрим основные новые возможности.

• В этой версии ограничения могут применяться к параметрам методов и возвращаемым значениям. Поэтому валидация компонентов может использоваться для описания и валидации контракта (предусловий и постусловий) заданного метода.

• Ограничения также могут применяться с конструкторами.

• Появился новый API для получения метаданных об ограничениях и объектах, подвергаемых этим ограничениям.

• Повысилась степень интеграции со спецификацией, описывающей контекст и внедрение зависимостей (теперь можно выполнять внедрение в валидаторы).

В табл. 3.1 перечислены основные пакеты, входящие в настоящее время в спецификацию Bean Validation 1.1.


Таблица 3.1. Основные пакеты для валидации компонентов
ПакетОписание

Рекомендуем почитать
Pro Git

Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.


Java 7

Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.


MFC и OpenGL

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


Симуляция частичной специализации

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


Обработка событий в С++

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


Питон — модули, пакеты, классы, экземпляры

Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.