2011-09-22 5 views
2

PreTranctionCommint 이벤트에서 Nhibernate validation framework로 도메인 모델을 검증 할 수 있습니까? 가능한 경우이 행사를 어떻게 작성 할 수 있습니까?NHibernate와 NHibernate Validation

답변

2

발췌 아래

NHibernate에 유효성 검사기는 http://nhforge.org/wikis/validator/nhibernate-validator-1-0-0-documentation.aspx

NHibernate에 이벤트 기반의 검증에서 한 촬영이 내장 NHibernate에 이벤트 리스너. PreInsertEvent 또는 PreUpdateEvent가 발생할 때마다 리스너는 엔터티 인스턴스의 모든 제약 조건을 확인하고 예외가 발생하면 예외를 throw합니다. 기본적으로, 객체는 삽입 전에 그리고 NHibernate에 의해 트리거 된 모든 업데이트 전에 검사 될 것입니다. 이 에는 계단식 변경 사항이 포함되어 있습니다. 이는 가장 편리하고 쉬운 유효성 검사 프로세스를 활성화하는 방법입니다. 제약 조건을 위반하면 이벤트가 런타임에 InvalidStateException을 발생시킵니다. 여기에는 각 오류를 설명하는 InvalidValue 배열이 포함됩니다.

+0

감사합니다. Cole W.는 트랜잭션 커밋 이벤트에 자체 리스너를 작성할 수 있습니다. 그렇다면이 사건에 대해 유효성을 검사하는 올바른 방법입니까? – viky

+0

nhibernate와 통합하도록 nhibernate validator를 설정하면 엔티티의 커밋시 유효성이 검사됩니다. –

4

는 ... NHibernate에 확인 프레임 워크 도메인 모델의 유효성을 검사 할 수 있습니까?

실제로 domain model이있는 경우 유효성 검사 프레임 워크가 필요하지 않습니다. 즉, 객체는 외부 마법 검증 프레임 워크에 의존하지 않고 동작을 캡슐화하고 내부 불변성을 보호합니다. 도메인 개체는 first place에서 '유효하지 않은'상태가되지 않습니다. 그들이 오래 살면 '항상 지속 가능해야'합니다. 도메인 개체의 유효성은 데이터 액세스 라이브러리에 의해 해고 될 수도 안될 수도 있습니다. VALIDATION이 지나치게 일반화되고 컨텍스트에 종속되기 때문에 비즈니스 오브젝트 INVARIANTS에 대해 생각하기 때문에 VALIDATION에 대해 생각하지 않는 것이 좋습니다. 개체에 불변량을 올바르게 적용하려면 타사 프레임 워크가 필요하지 않습니다. 도메인 클래스를 유효성 검사 프레임 워크에 연결하지 않으면 구현하기가 어렵지 않습니다.

하지만 당신은 당신의 질문을 바꿔 경우 :

는 ... NHibernate에 확인 프레임 워크 anemic 도메인 모델의 유효성을 검사 가능을?

그렇다면 대답은 다음과 같습니다. 예, 멋진 결과를 얻으십시오! 하지만 복잡성이 커지면 여러 객체 필드, 별도의 도메인 서비스 등 복잡한 도메인 규칙을 적용해야 할 것입니다. '사용자 정의 유효성 검사기'를 작성하거나 포기함으로써 유효성 검사 프레임 워크에 점점 더 많이 결합됩니다. 그리고 프레임 워크에 의해 구현 된 몇 가지 규칙과 코드 기반 전체에 퍼진 다른 규칙들로 끝납니다. 이 answer과 DDD를 일반적으로 살펴볼 가치가 있습니다.

+0

감사합니다 드미트리 귀하의 답변에서 더 많은 지식을 얻을 – viky

+0

downvoter는 관심이 있으십니까? – Dmitry

+0

도메인 모델 내부의 모든 것을 검증 할 수는 없습니다. 가장 간단한 경우는 시작일과 종료일이 있고 일부 규칙은 데이터베이스에서 읽어야하며, (삽입, 업데이트, 삭제) 할 때 게이트에서 유효성 검사를 적용하는 것이 좋습니다. 예외가 모두 깨진 규칙을 나열합니다 (다른 레이어에서 도움이 될 것입니다) –

0

어때?

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

설명과 함께 대답을 확장하십시오. –