2016-10-07 3 views
2

인터넷에는 UnitOfWork 패턴에 대한 정보가 가득합니다. SO조차 예외는 아니다.UnitOfWork는 트랜잭션과 동일합니까? 아니면 그 이상입니까?

나는 아직도 그것에 대해 뭔가를 이해하지 못합니다. 내 이해에 UnitOfWork = Transaction in DB. 그게 다야; 아무것도 더, 아무것도 덜.

이 정보가 맞습니까?

혼란은 다른 ORM에서 어떻게 구현 되었기 때문입니까? NHibernateTransaction 이상에 대해 ISession을 사용합니다. Dapper 당신에게 모든 것을 남겨 둡니다.

여기 내 질문은 ORM 또는 기술을 고려하지 않은 디자인 패턴에 관한 것입니다.

Transaction 이상인 경우 어떻게 설명하십시오.

편집 한

참조 this 링크 @ 데이비드 오스본 대답 제안.

작업 단위 (Unit of Work)는 데이터베이스에 영향을 줄 수있는 업무용 트랜잭션 중에 수행 한 모든 작업을 추적합니다. 작업이 완료되면 의 결과로 데이터베이스를 변경하기 위해 수행해야하는 모든 작업이 완료 될 때 이 표시됩니다.

그래서 이것은 UnitOfWorkDBTransaction및 기타 의미한다. 다음

은 추가 책임의 위치 : -

  • 는 작업이 세션에서 삭제, 변경 삽입 한 내용의 상태를 유지한다.

  • 이 상태를 기반으로 작업이 완료되면 데이터베이스를 수정하십시오.

위의 인용문에서 명확하게 언급하지는 않았지만 쿼리 일괄 처리를 제어 할 수도 있습니다.

내 이해가 정확합니까?

+0

당신의 유스 케이스에 의존하고 UnitOfWork (일명 CreateCustomer, MakeBooking, CreateInvoice, ...)가해야 할 일은 ... 말할 것입니다. 나는 하나의 변환으로 그런 식으로 사용할 수 있지만 Unit Of Work는 또한 하나 이상의 변환이 될 수 있습니다. 둘 이상의 경우 롤백/롤백 변환을 제어해야합니다. – Jehof

답변

2

originates, AFAIK, 논리적/비즈니스 트랜잭션 중 개체의 [지속성] 상태를 추적하는 ORM 도구가 필요합니다.

작업 단위가이를 관리하고 기본 저장 영역 기술 및 저장된 오브젝트와의 관계는 구현 세부 사항입니다.

중간에 여러 개의 SQL 문이있는 데이터베이스 트랜잭션은 틀림없이 작업 단위이기도합니다. 그러나, 필자가 생각하기에 가장 중요한 차이점은 패턴에 정의 된대로 작업 단위 (UOW)가 해당 수준의 세부 사항을 오브젝트 레벨로 추상화했다는 것입니다.

+0

가능합니다. 다시 말하지만, 그것은 구현의 재량에 달려 있습니다. NHibernate는 조건이 맞으면 일괄 작업을 수행한다는 것을 알고 있습니다. –

+1

@DavidOsborne 나는 ORM이 아직 문제가되지 않았던시기로 거슬러 올라간다고 확신한다. :) – guillaume31

+0

흥미로운 점, @ guillaume31. 내 경험은 파울러의 패턴까지 거슬러 올라간다. –

3

UnitOfWork은 업무용입니다. 기술 트랜잭션 (db 트랜잭션) 일 필요는 없지만 종종 기술 트랜잭션과 관련이 있습니다.

enterprices application patterns에서이

으로 정의는 비즈니스 트랜잭션에 의해 영향을받는 개체의 목록을 유지하고 변화의 밖으로 작성 및 동시성 문제의 해상도를 조정합니다.

변경 내용이 저장되는 방식과 저장 유형이 정의되어 있지 않습니다.

applcation HTTP를 사용하여 SQL을

  • 파일 시스템을 사용하여 스트림
  • 지속성 서비스를 사용하여

    • 데이터베이스에 변경 사항을 작성할 수는
    • 캐시를 분산 또는 인 - 메모리 저장 메소드 호출
    • 을 사용하여 요청

    UnitOfWork (업무 트랜잭션) 다른 비즈니스 트랜잭션이 유효한 비즈니스 오브젝트 만 볼 수있게합니다.

    예. 응용 프로그램이 유스 케이스를 실행하면 비즈니스 객체가 수정됩니다. 두 개의 비즈니스 트랜잭션 (일반적으로 사용 사례)이 병렬로 실행되는 경우 응용 프로그램은 각 비즈니스 트랜잭션이 수행하는 변경 사항과 다른 비즈니스 트랜잭션에서 변경 사항을 확인해야합니다.

    기술적으로 이것은 종종 db 트랜잭션을 사용하여 수행됩니다. 따라서 작업 단위는 대개 db 트랜잭션입니다.

    ORM 프레임 워크를 사용하여 지속성을 처리하는 응용 프로그램은 일반적으로 단어 단위와 db 트랜잭션 사이에 일대일 관계가 있습니다. 따라서 작업 단위와 db 트랜잭션의 차이점은 일반적으로 개발자와 관련이 없습니다.