2011-02-09 3 views
1

만약 당신이 한번보세요 at this SO question 나는 다음 단계에서 질문이 있습니다.작업 단위, 저장소, 컨텍스트

Items 및 SubItem을 생성하는 두 개의 저장소가 있다고 가정 해보십시오. 또한 (이 간단한 경우) 두 개의 다른 항목을 변경하기위한 컨텍스트로 작동하는 UnitOfWork가 있습니다.

가의 UnitOfWork를 생성하는 몇 가지 방법이있을 것, 때로는이 저장소에 주입, 때로는이 공장에 의해 생성 된 (다음 중 하나를 공장에서 주입하거나 검색 할 수 있습니다.

내 질문은 방법의 UnitOfWork는 변화가 노력하는 지금 저장소에 통보합니까?

을 내가 저장소가/롤백 커밋의의 UnitOfWork에 이벤트를 구독 할 수 있습니다 같아요.

두 번째 질문, 장치의 아이디어를 작업의 경우,이 권리가 있다면, conf 파일 일 수있는 업데이트를 조정해야합니다. 용서. Item과 SubItem의 예제를 사용하면 (Item에 여러 개의 SubItem이 있음) UnitOfWork가 좌표를 지정하므로 Item이 먼저 쓰여지고 SubItem이 작성됩니다. 이제 저는 잘못된 것처럼 보이는 저장소에 대해 알기 위해 작업 단위가 필요합니다.

감사합니다.

답변

2

내 저장소를 구조화하는 방법은 Repo의 BeginUnitOfWork() 메소드에 의해 생성 된 UnitOfWork를 단순히 "토큰"으로 만드는 것이 었습니다. 그런 다음 Repo에서 다른 메소드를 거의 전달해야했습니다 DB 호출. 컨셉을 수행하는 방법을 알아야하는 유일한 방법은 버려지는데, 그 일이 발생하면 해당 UOW와 관련된 NHibernate 세션이 닫힙니다. Repo에서 보호 된 메서드에 대한 대리자를 제공하여 Dispose 메서드에서 다시 호출하면이 작업이 수행됩니다. 이것이 나를 위해하는 일은 실제 데이터 접근 메커니즘을 완전히 추상화하는 것입니다. 백엔드에 관계없이 동일한 패턴을 구현할 수 있으며 패턴 사용자는 UnitOfWork를 해킹하여 실제 데이터 액세스 메커니즘을 얻을 수 없습니다.

YMMV; DB 오브젝트를 수행해야하는 클래스가 저장소 및 작업 단위에 종속되어야합니다. 추가적인 델리게이트를 사용하여 UnitOfWork 자체에서 유일하게 종속 될 수있는 메서드를 노출 할 수 있습니다.

+1

흥미 롭습니다. 초기에 내가 가진 개념적 문제 중 하나는 제 작업 단위가 작업이 추가되면서 공정한 오래된 작업을 할 수 있다는 것입니다. 지속성 호출이 무한대로 연기되지 않도록 프레임을 다시 프레임하면 훨씬 쉽게 관리 할 수 ​​있습니다. – Ian

관련 문제