POEAA : 객체-관계형 동작 패턴
작업 단위
비즈니스 트랜잭션의 영향을 받은 객체의 리스트를 유지 관리하고, 변경 내용을 기록하는 일과 동시성 문제를 해결하는 일을 조율한다.
작업의 일관성 유지를 위함
example 단위작업 기본 구현
example 단위작업 조회 설정 구현(TheadLocal)
example DomainObject
example Album
example EditAlbumScript
서비스 계층에서 작업단위 핸들링
example UnitOfWorkServlet
프레젠테이션 계층에서 작업단위 핸들링
식별자 맵
모든 객체를 한 맵에 로드해 각 객체가 한 번씩만 로드되게 한다. 객체를 참조할 때는 맵을 이용해 객체를 조회한다.
고려사항
- 키의 선택
- 일반적으로 테이블의 기본식별자(PK)
- 명시적 또는 범용적
- 명시적 :
findPerson(1)
- 범용적 :
find("Person", 1)
- 식별자 맵의 수
- 클래스 당 하나 : 명시적
- 전체 세션에 하나 : 범용적
- 식별자 맵의 위치
- 작업 단위 위치
- 세션과 연결된 레지스트리
- ThreadLocal 추천 : 쓰레드에 안전해서 동기화 처리가 필요없음
명시적 식별자(클래스 당 하나)를 추천
값객체(Value Object)에는 식별자 맵을 사용할 필요가 없다.
식별자 맵의 장점
지연 로드
필요한 데이터를 모두 포함하지는 않지만 데이터가 필요할 때 가져오는 방법을 아는 객체
구현방법
- 지연 초기화 : null 비교
- 가상 프록시 : Proxy
- 값 홀더 : Wrapper
- 고스트 : 초기에는 비어있는(null아님)객체이나, 조회 시 실제 DB 접근