You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
현재 구조에서 고민했던 부분
리팩터링 내용
구조의 변화
controller - service - domain - repository
controller - facade - domain -repository
현재 구조 상황
dto <> domain
매핑을 진행변경해야 할 부분
다른 패키지의 도메인 사용
리뷰를 등록하거나 조회할 때, 템플릿을 한 번 가져오면 템플릿 내부 정보를 다 사용할 수 있어야 하지만, 템플릿 관련 엔티티들이 전부 id로 분리되어 있어서 매번 id를 통해 자원을 가져온다.
엔티티의 연관관계를 재설정하는 방법도 있지만, 다른 패키지에서 영속화 대상인 엔티티를 넘기고 사용하는 것은 변경에 취약해지는 구조가 되기 쉽다. (트랜잭션 내에서 엔티티를 변경하게 되면 변경 내용이 반영될 수 있음)
따라서, 엔티티에 영향이 없는 도메인 객체를 하나 만들고, 필요한 연관을 갖게 한다.
'템플릿'의 역할은 주로 다른 패키지에서의 사용이다. 따라서 사용 가능한 도메인을 만든다.

하지만 이 객체를 다른 패키지에서 직접 사용하게 되면 다른 패키지와의 협력 과정에서 이 객체가 많은 역할을 맡게 될 수 있다.
즉, 패키지 간 결합도가 증가하고 경계가 모호해진다.
따라서 연관 관계를 한 곳으로 몰아서 캡슐화 할 수 있는 클래스를 만들어서 사용한다.
리뷰 등록 시 사용하는
TemplateValidationContext
가StructuredTemplate
를 사용하여 필요한 메서드들을 조합해서 만들어둔다.리뷰 등록 시, 검증 과정에서는
StructuredTemplate
을 사용할 필요 없이,TemplateValidationContext
만을 사용해서 검증할 수 있어서,다른 클래스에서는 템플릿 패키지에 대한 의존이 없어지게 된다.




이 객체의 변환도 facade에서 하기 때문에 domian에 있는


ReviewRegisterService
에도 다른 패키지의 의존성이 없다.추가 고민 사항
facade - service
간의 통신을 하고 있지만,facade -facade
간의 통신으로 데이터를 주고받는 것이 더 적합하다 생각한다.Beta Was this translation helpful? Give feedback.
All reactions