대규모 응용 프로그램을 설계 중이며 DDD 기반의 다중 계층 아키텍처를 사용합니다.
데이터 계층 (리포지토리 구현), 도메인 계층 (도메인 모델 및 인터페이스 정의-리포지토리, 서비스, 작업 단위), 서비스 계층 (서비스 구현)을 갖춘 MVC가 있습니다. 지금까지 모든 계층에 걸쳐 도메인 모델 (주로 엔터티)을 사용하고 DTO를 뷰 모델로만 사용합니다 (컨트롤러에서 서비스는 도메인 모델을 반환하고 컨트롤러는 뷰 모델을 생성하여 뷰에 전달 함).
DTO 사용, 사용 안 함, 매핑 및 전달에 대한 수많은 기사를 읽었습니다. 명확한 답변이 없다는 것을 이해하지만 도메인 모델을 서비스에서 컨트롤러로 되돌릴 수 있는지 확실하지 않습니다. 컨트롤러가 항상 뷰 특정 뷰 모델을 생성하기 때문에 도메인 모델을 반환해도 여전히 뷰로 전달되지 않습니다.이 경우 합법적 인 것처럼 보입니다. 반면, 도메인 모델이 비즈니스 계층 (서비스 계층)을 떠날 때 기분이 좋지 않습니다. 때로는 서비스가 도메인에 정의되지 않은 데이터 객체를 반환해야하는 경우 매핑되지 않은 도메인에 새 객체를 추가하거나 POCO 객체를 생성해야합니다 (일부 서비스는 도메인 모델을 반환하기 때문에 추악합니다) 효과적으로 DTO를 반환).
문제는-뷰 모델을 엄격하게 사용하는 경우 도메인 모델을 컨트롤러로 되돌려 보내도됩니까, 아니면 서비스 계층과의 통신에 항상 DTO를 사용해야합니까? 그렇다면 어떤 서비스가 필요한지에 따라 도메인 모델을 조정해도 괜찮습니까? (서비스가 도메인을 가지고 있어야하기 때문에 솔직히 그렇게 생각하지 않습니다.) DTO를 엄격하게 고수해야한다면 서비스 계층에서 정의해야합니까? (그렇다고 생각합니다.) 때로는 DTO를 사용해야한다는 것이 분명합니다 (예 : 서비스가 많은 비즈니스 로직을 수행하고 새로운 객체를 생성하는 경우). 때로는 도메인 모델 만 사용해야한다는 것이 분명합니다 (예 : 멤버십 서비스가 빈혈 사용자 ( s)-도메인 모델과 동일한 DTO를 만드는 것이별로 의미가없는 것 같습니다.)-일관성과 우수 사례를 선호합니다.
기사 도메인 vs DTO vs ViewModel-언제 어떻게 사용합니까? (및 일부 다른 기사)는 내 문제와 매우 유사하지만이 질문에 대답하지 않습니다. 기사 EF를 사용하여 리포지토리 패턴으로 DTO를 구현해야합니까? 또한 비슷하지만 DDD를 다루지 않습니다.
면책 조항 : 디자인 패턴이 존재하고 멋지 기 때문에 어떤 디자인 패턴 만 사용하려고하지 않습니다. 반면, 좋은 디자인 패턴과 관행을 사용하고 싶습니다. 응용 프로그램 전체를 디자인하고 분리하는 데 도움이되기 때문입니다. 우려 할 점은, 적어도 현재로서는 특정 패턴을 사용하는 것조차 "필요"하지 않다는 것입니다.
언제나 그렇듯이 감사합니다.