Многие объекты домена в нашем домашнем проекте нуждаются в проверке поля, и для этой цели мы используем commons-lang. Например:Смешивание Проверка JAR 303 и руководство (через Apache Commons) в объектах DDD
public class Position {
private static final int LATITUDE_AMPLITUDE = 90;
private static final int LONGITUDE_AMPLITUDE = 180;
private Float latitude;
private Float longitude;
public Position(float latitude, float longitude) {
Validate.inclusiveBetween(-LATITUDE_AMPLITUDE, LATITUDE_AMPLITUDE, latitude,
"Latitude must be +- " + LATITUDE_AMPLITUDE);
Validate.inclusiveBetween(-LONGITUDE_AMPLITUDE, LONGITUDE_AMPLITUDE, longitude,
"Longtitude must be +- " + LATITUDE_AMPLITUDE);
this.latitude = latitude;
this.longitude = longitude;
}
}
Мы решили не использовать JSR 303, потому что это домен пары объектов с инфраструктурой и требует внешнего вмешательства, что будет срабатывать проверки.
Но когда мы начали внедрять конечные точки REST, мы снова столкнулись с проблемой проверки, поскольку json-преобразователи не используют конструктор классов, а вводят значения через Reflection.
Очень легко проверить объекты через аннотацию JSR303 и Джерси @Valid
, но для этого требуется аннотировать объекты домена с помощью JSR303. И у нас есть несколько вариантов:
- Использовать только проверку JSR303. Имхо, это плохой вариант. Бизнес-уровень, который работает с этими объектами, также должен иметь проверенные объекты без сложного (более сложного, чем просто
new
) инициирования проверки JSR303. - Используйте JSR303 + ручную проверку. Он будет удовлетворять как: прикладным, так и бизнес-уровням, но делает объекты домена жирными из-за зависимости JSR303 и его аннотаций.
Что вы думаете об этом? Это хороший способ сочетания как JSR303, так и ручной проверки?
Но что, если я буду использовать свой аннотированный класс JRS303 'Position' в неконфиденциальном контексте JSR303? Например, в службе домена, которые не имеют понятия о Spring или Jersey, я использую. Здесь JSR303 имеет смысл 0, если только я не проведу проверку вручную. – ovnia
Очень просто создать экземпляр «Validator» и проверить ваши сущности без использования Spring или Jersey. См. Раздел «Начало работы» Hibernate Validator для примера требуемого кода (это не так много): http://hibernate.org/validator/documentation/getting-started/ – ck1
Итак, вы предлагаете использовать 'Validation.buildDefaultValidatorFactory () .getValidator(). validate (новая позиция (1L, 2L)); 'вместо' new Position (1L, 2L) '? – ovnia