Проверка NHibernate и NHibernate - PullRequest
       23

Проверка NHibernate и NHibernate

2 голосов
/ 22 сентября 2011

Можно ли проверить модель домена с помощью инфраструктуры проверки Nhibernate в событии PreTranctionCommint? Если возможно, как мы можем написать это событие?

Ответы [ 3 ]

4 голосов
/ 23 сентября 2011

Можно ли проверить модель домена с помощью среды проверки Nhibernate ...?

Если у вас действительно модель домена , тогда она не нуждается в структуре проверки,Другими словами, объекты инкапсулируют поведение и защищают свои внутренние инварианты, не полагаясь на внешнюю платформу магической проверки.Доменные объекты никогда не переходят в «недопустимое» состояние на месте .Если они долгоживущие, то они также должны быть «всегда стойкими».Действительность ваших доменных объектов не должна зависеть от события, которое может или не может быть запущено библиотекой доступа к данным.Также может оказаться полезным не думать о VALIDATION, потому что она чрезмерно обобщена и зависит от контекста, а вместо этого думать о бизнес-объекте INVARIANTS .Вам не нужна сторонняя платформа для правильного применения инвариантов в ваших объектах.Это действительно не сложно реализовать без привязки классов вашего домена к платформе валидации.

Но если вы перефразируете свой вопрос в:

Возможно ли проверить anemic модель домена с платформой проверки Nhibernate ...?

Тогда ответ будет: Да, дерзайте, это круто!Но имейте в виду, что по мере роста сложности вы захотите применять более сложные правила домена, включающие несколько полей объекта, отдельные доменные службы и т. Д. Вы будете все больше и больше привязываться к среде валидации, написав «пользовательские валидаторы», или просто откажитесь от нееи заканчиваются некоторыми правилами, реализуемыми фреймворком, а другие распространяются по всей базе кода.Возможно, стоит посмотреть на этот ответ и DDD в целом.

2 голосов
/ 22 сентября 2011

Ниже приведена выдержка из http://nhforge.org/wikis/validator/nhibernate-validator-1-0-0-documentation.aspx

валидация на основе событий NHibernate

В валидаторе NHibernate имеется два встроенных прослушивателя событий NHibernate.Всякий раз, когда происходит PreInsertEvent или PreUpdateEvent, слушатели проверят все ограничения экземпляра сущности и сгенерируют исключение, если какие-либо из них будут нарушены.По сути, объекты будут проверяться перед любой вставкой и перед любым обновлением, инициируемым NHibernate.Это включает в себя каскадные изменения!Это наиболее удобный и простой способ активировать процесс проверки.Если ограничение нарушено, событие вызовет исключительную ситуацию InvalidStateException, которая содержит массив InvalidValues, описывающий каждую ошибку.

0 голосов
/ 21 августа 2017

как насчет этого?

using(transaction...)
{
    validationA();
    validationB();
    session.saveOrUpdate();(do some transaction)
}
...