2012-04-23 3 views
3

У меня есть проект, в котором модель данных и бизнес-слой расположены в двух разных модулях. Разумеется, модуль bussiness имеет зависимость от модельного модуля. Аутентификация объекта реализуется посредством аннотаций java-validation-api.Где внедрить проверку соответствия между сущностями?

Мне интересно, где я должен реализовать проверку соответствия между сущностями (проверка бизнеса, где проверяются отношения между различными типами сущностей). В настоящее время я вижу следующие варианты:

  1. Создание пользовательских javax.validation.ConstraintValidators и связанных аннотаций. Проблема в том, что валидатору нужен доступ к бизнес-сервисам, т. Е. Для получения связанных объектов, но модуль модели не должен иметь зависимости от бизнес-модуля.
  2. Внедрение кросс-сущности-проверки в методах persist/merge-методов бизнес-услуг (то есть с использованием перехватчиков). Это было бы возможно, но проверка соответствия между сущностями была отделена от проверки сущности, и я хотел бы иметь только одно место для проверки.

Какой вариант предпочтительнее? Есть ли лучшие предложения?

Спасибо, Sebastian

ответ

1

С идеологической точки зрения подхода 1. лучше. Проверка бина работает на уровне модели (в Model-View-Controller), и нет ничего плохого в том, что модельная часть говорит с базой данных. Так, например, вы можете создавать DAO, которые могут использоваться как для уровня обслуживания, так и для проверки модели, чтобы избежать дублирования кода.

Перехватчики также являются хорошим местом для подтверждения чего-либо, но вы не сможете использовать полную мощность и автоматичность проверки Bean. Вероятно, вам нужно будет вручную вызвать метод проверки на объектах модели, бросить ConstraintViolationException там, где это необходимо, и т. Д. Допустим, но немного поработайте. Кроме того, некоторые валидации, вероятно, останутся в модели, поэтому, как вы указали, будет более одного места, где происходит валидация.

Поэтому я бы переместил необходимый код DB для разделения слоя и пошел с опцией 1.

+0

Спасибо за ответ. –

+0

Итак, если на отдельном уровне было больше, чем просто методов доступа к данным, т. Е. Сложных вычислений, необходимых для проверки, вы предпочтете вариант 2, правильно? Или любой другой? –

+0

Модель - это правильное место для сложных вычислений, так что, 1. выглядите лучше, если мы хотим как можно лучше придерживаться MVC. Очевидно, что если эти вычисления выполняются на сервисном уровне, и нет смысла перемещать их в другом месте, используя опцию 2. было бы лучше. –

Смежные вопросы