중요한 도메인 로직은 도메인으로 하자.
Service Layer 에 set 메소드가 있으면 일단 의심 -> 이 부분을 도메인 영역으로 변경할 수 있도록 하자
Aggregate
Entity + Value 의 개념 (포함관계에 있다, 즉 여러개의 Entity + Value 의 모음이 될 수 있음.)
(라이프 사이클이 동일할 가능성이 높다)
Aggregate 에 Root 를 만들고, 일관성(Consistency)이 깨지지 않도록 Root에 책임을 부여
- 일관성이란 구성요서들 간의 불일치가 존재하지 않는 것.
즉, Root 를 통해서만 하위 Value 들을 변경할 수 있도록 함.
(여기서 value 가 자신만의 pk 를 가지고 있지 않기 때문에 value 임.. Entity는 DB 로 봤을 때 pk가 포함된 테이블이라 볼 수 있으니..)
Value 변경
- Set 을 통하여 기존값을 변경하는 방법
- 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) (1) | 2022.07.14 |
---|---|
What-How 에 대해 (1) (0) | 2022.07.14 |
모델 (0) | 2022.07.14 |
기능, 역할, 책임 (0) | 2022.07.14 |