본문 바로가기
개발 관련/모델 세미나 정리

Aggregate, Value

by lazysnack 2022. 7. 14.

중요한 도메인 로직은 도메인으로 하자.

Service Layer 에 set 메소드가 있으면 일단 의심 -> 이 부분을 도메인 영역으로 변경할 수 있도록 하자

Aggregate

Entity + Value 의 개념 (포함관계에 있다, 즉 여러개의 Entity + Value 의 모음이 될 수 있음.)
(라이프 사이클이 동일할 가능성이 높다)

Aggregate 에 Root 를 만들고, 일관성(Consistency)이 깨지지 않도록 Root에 책임을 부여

  • 일관성이란 구성요서들 간의 불일치가 존재하지 않는 것.
    즉, Root 를 통해서만 하위 Value 들을 변경할 수 있도록 함.

(여기서 value 가 자신만의 pk 를 가지고 있지 않기 때문에 value 임.. Entity는 DB 로 봤을 때 pk가 포함된 테이블이라 볼 수 있으니..)

Value 변경

  1. Set 을 통하여 기존값을 변경하는 방법
  2. New 를 하여 기존값을 변경하지 않고 새로 만드는 방법

2가지 방법이 존재.

하지만, 2번 방법을 추천 이유는 new 를 사용할 경우 불변(Immutable) 이 되며, 불변이 되었을 경우 코드 분석이 용이하다.
(생각해보면, 당연할 수도 있는 것... 특히 Map 같은 Collection 객체들로 움직일 때, Map 을 넣어서 Map 을 받고... Map 의 Key 값이 변경되는 경우도 있어서 사전정보로 알 수 없는 것들을 get 으로 가져오는 경우 그것이 이전부터 있던 값인지, 신규값인지는 해당 메소드 혹은 쿼리 쪽을 직접 까보지 않는 한 모름)

  • 불변에 대해서 생각해보면 일리는 있다고 생각함. 근데 자바에서 불변으로 사용하려면 final 을 붙여서 사용하는데, 객체나 Map 같은 건 final 키워드를 사용해도 변경할 수 있는 걸로 알고 있음.. 이 부분은 따로 더 찾아봐야 할 주제)

  • Repository = Aggreate 단위로 존재
    (이 부분은 좀 헷갈림. Repository 를 여태 DB 테이블 단위로 생각하고 있었고, Entitry = Repository 로 생각하고 있었음.
    근데 갑자기 저런 등호가 성립된다고 하면...? 포함관계가 성립된다고는 하나 3개의 관계가 명확하게 잡히는 것은 아님)

추후에는 Aggregate 는 어디까지 정의할 수 있는지 확인해보도록 함.

'개발 관련 > 모델 세미나 정리' 카테고리의 다른 글

What-How 에 대해 (2)  (0) 2022.07.14
What-How 에 대해 (1)  (0) 2022.07.14
모델  (0) 2022.07.14
기능, 역할, 책임  (0) 2022.07.14