1. 설계 방식
헥사고날 아키텍처와 클린 아키텍처의 원칙을 따를 때, @RequestBody
나 @PathVariable
로 받은 id
나 개별 필드 값, 또는 DTO 객체를 직접 유즈케이스에 넘기기보다는 이를 컨트롤러 로직에서 도메인 객체로 캡슐화하여 유즈케이스에 전달하는 것이 좋은 설계 방식입니다. 이 방식은 여러 가지 이유로 권장됩니다.
도메인 객체로 변환하는 이유
-
응집도와 일관성:
- 도메인 객체로 변환하면 비즈니스 로직과 관련된 데이터가 하나의 객체에 캡슐화되어 응집도가 높아집니다. 이렇게 하면 관련 로직을 한 곳에서 관리할 수 있어 코드의 일관성과 유지보수성이 향상됩니다.
-
유효성 검증:
- 도메인 객체 생성 시점에서 입력 데이터의 유효성을 검증할 수 있습니다. 이렇게 하면 입력 데이터의 무결성을 보장하고, 도메인 로직에 잘못된 데이터가 들어가는 것을 방지할 수 있습니다.
-
유지보수성:
- 도메인 객체를 사용하면 코드가 더 읽기 쉬워지고, 변경이 발생할 때 각 필드를 일일이 수정할 필요 없이 도메인 객체의 변경만으로 처리할 수 있습니다. 이는 유지보수성을 높이는 데 기여합니다.
-
비즈니스 로직의 명확한 표현:
- 도메인 객체는 비즈니스 로직을 명확하게 표현하는 데 도움이 됩니다. 객체 지향 설계에서는 데이터와 로직을 함께 묶어서 사용하므로, 비즈니스 로직을 명확하게 드러내기 위해 도메인 객체를 사용하는 것이 좋습니다.
-
의존성 관리:
- 도메인 객체를 사용하면 서비스 계층과 프레젠테이션 계층 간의 의존성을 줄일 수 있습니다. 서비스는 도메인 객체에만 의존하게 되어, 프레젠테이션 계층의 변경이 서비스 계층에 미치는 영향을 최소화할 수 있습니다.
요약
- 데이터의 변환: 컨트롤러에서 받은 데이터를 도메인 객체로 변환하여 서비스 계층에 전달합니다.
- 서비스에서 도메인 사용: 서비스는 도메인 객체를 사용하여 비즈니스 로직을 수행하며, 도메인 객체 내의 데이터에 접근하여 필요한 처리를 합니다.
도메인 객체 사용 예시
컨트롤러에서 도메인 객체 생성