현재 DDD 프로젝트를 진행하고 있으며 최근에 DTO 사용과 관련된 문제에 직면했습니다. DDD : 다른 로직을 사용하는 DTO 사용
내가 내 도메인에 다음 DTO가 (코드는 PHP에 있지만 모든 언어에있을 수 있습니다) :class TranslationDto {
private $locale;
private $text;
public function getLocale(...);
public function getText(...);
}
목표는 UI가 로케일과 그 대응하는 도메인에게 DTO를 줄 것입니다 본문.
지금 질문// UI => domain, for example when willing to persist the data (write)
TranslationDto [
'locale' => 'FR',
'text' => null,
]
: 로케일이 UI - 투 - 도메인 흐름에
인 경우 로케일 "FR"가 번역되지 않은 경우 그래서 예를 들어, DTO는이 다음과 같이 표시됩니다 번역되지 않으면 DTO의 $text
값은 null
이됩니다. 로캘이 변환되지 않은 경우 DTOP의 $text
값은 null
이 될 것이므로 Domain-to-UI 쪽에서 같은 종류의 논리를 구현했습니다.
그러나 팀의 개발자가 대체 논리를 추가 했으므로, 예를 들어 FR
로켈이 존재하지 않으면 도메인은 기본 로케일 (예 : EN)을 반환합니다.
TranslationDto [
'locale' => 'FR',
'text' => 'The fallback text, in english',
]
UI를 - 투 - 도메인 "논리"이 도메인에-UI "논리"에 의해 파괴 될 것이다 나는이에 당황했다 : 반환 도메인 - 투 - UI 객체는 다음과 같이 표시됩니다 따라서 개발자의 입장에서 볼 때이 DTO를 읽을 때는 조심해야 할 것입니다. 이제는 DTO가 대체되었는지 여부는 알 수 없습니다. 다른 말로하면, 우리는이 DTO를 정말로 "신뢰"할 수 없습니다.
반면 UI는 객체를 도메인에서 요청한 후에 번역 할 필요가 없기 때문에이 대체 논리는 UI 레이어에서 더 편리합니다. 항상 올바른 텍스트가 포함됩니다.
번역본 (예 : 관리 백엔드)을 관리해야하므로 이제는 하나가 아닌 2 개의 끝점을 갖게됩니다. 즉, "실제"값 (폴백 없음)이있는 DTO와 하나의 끝점 대체 값을 요청하기 위해
당신은 어떻게 생각합니까? 어떤 방법이 가장 좋습니다? 아니면 더 나은 대체 방법이 있습니까? DTO는 정말 그냥 UI - 투 - 도메인에 대한이어야한다, 그래서
건배