O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

DDD Repository

545 visualizações

Publicada em

DDD Repository 아꿈사 발표 자료

Publicada em: Tecnologia
  • Entre para ver os comentários

DDD Repository

  1. 1. Repository (Domain Driven Design) 아꿈사 Cecil
  2. 2. 도메인 객체를 사용하려면? 도메인 객체에 대한 참조를 이용
  3. 3. 객체의 참조를 얻으려면? 새로운 도메인 객체를 생성 혹은 도메인 객체의 연관 관계를 탐색
  4. 4. 도메인 객체의 연관 관계를 찾기 위한 첫 번째 진입점은? 리파지토리(Repository)
  5. 5. Repository A mechanism for encapsulating storage, retrieval, and search behavior which emulates a collection of objects. DDD community (http://dddcommunity.org)
  6. 6. 여기서 중요한 점 리파지토리는 Aggregate 단위로 동작합니다 Aggregate: 하나의 단위로 취급할수 있는 객체들의 클러스터 내부 객체들의 도메인 무결성을 관리
  7. 7. 일반적으로 도메인 객체는 데이터 베이스에 저장되고, 필요할때 조회된다 데이터베이스를 통해 모든 도메인 객체에 접근이 가능함
  8. 8. 이러한 데이터베이스를 바로 사용하게 된다면..
  9. 9. Order -orderId: OrderId -totalAmounts: Money -orderLines: List<OrderLine> OrderLine -orderId: OrderId -productId: ProductId -price: Money -quantity: int @Update(“Update OrderLine SET quantity = #{quantity}, price = #{price} WHERE orderId = #{orderId} AND productId = #{productId}”) void updateOrderLine(@Param(“orderId") OrderId orderId, @Param(“productId”) ProductId productId, @Param(“quantity") int quantity, @Param(“price”) Money price) update 무결성 X
  10. 10. 또한, 편의를 위해 Aggregate를 사용하지 않고, 질의를 통해 결과를 얻어오게 됨 결과적으로, Entity와 Value 객체는 데이터 컨테이너로 취급
  11. 11. 리파지토리의 이점 •객체 생명주기를 관리하기 위한 단순한 모델을 제공 •데이터소스로부터 도메인 설계를 분리 •객체 접근에 관한 설계 전략을 유지
  12. 12. 리파지토리 기본 기능 •Aggregate 객체 저장 •Id로 Aggregate 조회 •Aggregate 업데이트 (Optional) •Aggregate 삭제 •질의 객체를 사용한 검색
  13. 13. 레포지토리 설계 방안 컬렉션 지향 vs 영속성 지향
  14. 14. 컬렉션 지향 리파지토리 •자바의 표준 컬렉션과 유사하게 동작 •ex) HashSet •객체의 변경을 저장하는 요청이 없음 •객체에 일어난 변화를 추척하는 기능이 필요 •JPA, Hibernate를 사용할 경우 구축이 용이
  15. 15. 영속성 지향 리파지토리 •존재하는 객체를 변경할때 마다 save를 호출 •컬렉션 지향 방법이 맞지 않을때 사용 •라이브러리에서 객체의 변화를 추적 기능 제공 않음 •ex) Mybatis, NoSQL .. •장점: 영속성 라이브러리 변경이 응용계층에 영향을 미치지 않음
  16. 16. 리파지토리 vs DAO DAO Repository 같은점 영속성 메커니즘의 추상적 개념을 제공 영속성 메커니즘의 추상적 개념을 제공 다른점 일반적으로 데이터베이스 테이블에 따라 표현되며, CRUD 인터페이스를 제공 도메인 객체 중심 (컬렉션지향으로 주로 설계)
  17. 17. 리파지토리와 모듈 응용 계층 도메인 계층 인프라 계층 Model <<Interface>> Repository Service RepositoryImpl
  18. 18. 리파지토리와 트랜잭션 •도메인 계층은 트랙잭션을 관리하기 위한 곳이 아님 •계층 아키텍처에서는 응용 계층이 트랙잭션을 관리 •성능을 위해 단일 트랙잭션에서 여러 Aggregate를 수정하는 것은 피해야 함
  19. 19. References •Eric Evans, Domain Driven Design(이대엽 옮김). 경기도 파주시 문발로 위키북스, 2011. •Vaughn Vernon, IMPLEMENTING DOMAIN- DRIVEN DESIGN(윤창석,황예진 옮김). 서울시 양천구 에이콘출판주식회사, 2016 •최범균. DDD START! 도메인 주도 설계 구현과 핵심 개념 익히기. 서울시 마포구 (주)지앤선, 2016.

×