많은 CRUD 기능을 포함하는 응용 프로그램에서 DDD를 구현하고 일종의 웹 API와 결합하면 도구로 비교적 간단하게 만들 수있는 상황이됩니다 플랫폼에서 제공하는 것이 더 어려워집니다.DDD 및 CRUD 형 응용 프로그램
우리가 사용자 개체를 가지고 말해, 당신은 빈혈 도메인 모델을 생성하지 않도록 열심히 노력하고, 그래서 당신은 더 표현 작업 모델링이 :
class User {
public void terminateAccount(TeminationReason reason);
public void reactivateAccount();
}
위 클래스가 있기 때문에, 좋은 예를 들어, 계정을 해지 된 것으로 표시하고 한 번에 이유를 설정할 수 있습니다. 분명히 setEnabled (false)와 setTerminationReason (..)에 대한 개선점.
문지르면, 사용자가 GET/PUT 할 수있는 JAX-RS 웹 서비스가 있다고 가정 해 봅시다. 프레임 워크 (JAX-RS, JAXB)는 우리 DTO 객체를 쉽게 직렬화 및 비 직렬화합니다. 이제, 우리는 이전에했던 수있는 곳 :
entity.setEnabled(dto.isEnabled);
entity.setTerminationReason(dto.getTerminationReason);
우리가 대신 있습니다
if (entity.isEnabled() && !dto.isEnabled()) {
entity.terminateAccount(dto.getTerminationReason);
} else if (!entity.isEnabled && dto.isEnabled) {
entity.reactivateAccount();
}
큰 분리 여기에 도메인 개체의 비즈니스 중심의 인터페이스 및 CRUD 스타일의 액세스 패턴 인 RESTful API 이상. DDD와 REST는 모두 자신의 권리에서 모범 사례이므로, 모든 사람들이 여기에서 코드를 덜 고통스럽고 반복적으로 만드는 법을 배웠습니다.
PS - 배후의 ORM 프레임 워크를 사용할 때 실제 엔티티를 XML/JSON으로 직렬화하는 것은 지연로드를 제한 할 수 없기 때문에 DTO를 사용하고 있습니다. 또한 일반적으로 도메인 모델에 속하지 않는 RESTful API (참조 URL 등)를 통해 노출하려는 다양한 속성이 있습니다. 나는 여기서도 제안에 개방적이다.
@TTar 글쎄, 당신은 또 다른 계층에 복잡성을 이동하지 않습니다? 이제 클라이언트는 사용자 선택에 따라'terminateAccount'와'activateAccount' 사이에 어떤 애플리케이션 서비스가 호출되어야 하는지를 알아야합니다. 응용 서비스에 캡슐화하는 것과 달리 복잡성을 이동시키는 것이 바람직합니까? – plalx