2009-12-04 2 views
3

데이터를 XML로 노출하는 REST API를 구축 중입니다. 내 도메인 계층에는 API 뒤에있는 서비스 계층과 고객에게 제공 할 클라이언트 API에 의해 소비되도록 의도 된 수많은 도메인 클래스가 있습니다. 고객은 REST API와 직접 상호 작용할 수 있지만 클라이언트 API는 작업을 단순화합니다. 내 도메인 클래스를 모든 데이터 지속성 논리로 유지하고 싶지만 도메인 클래스가 IXmlSerializable을 구현하여 노출되어 노출 된 데이터를 직렬화하는 프로세스를 간소화하는 데 도움이되는지 알아 내려고 애쓰는 중이다. API 도메인 클래스에 직렬화 논리가 없도록하고 직렬화 동작을 사용하여이를 장식한다고 생각했습니다. 직렬화를 처리하는 객체 내부에 도메인 객체를 래핑합니다. 나는 물건을 그들이 필요로하는 것보다 더 복잡하게 만들고 있습니까? 내가 어떻게 이것에 접근해야하는지에 대한 어떤 생각? 감사!도메인 개체가 IXmlSerializable을 구현해야합니까?

답변

5

도메인 클래스는 지속성 또는 직렬화가 아닌 비즈니스 논리에만 관련되어야합니다.

각 도메인 클래스 중 하나에 해당하는 DTO (Data Transfer Object) 클래스 집합을 만들어야합니다. 이 클래스에는 노출하기로 결정한 도메인 클래스의 속성 만 포함됩니다. 이렇게하면 도메인 클래스가 지속성 또는 직렬화 계층을 통해 노출되지 않는 속성을 가질 수 있습니다.

DTO 개체 만 serialize 및 deserialize됩니다.

그런 다음 도메인과 DTO 개체간에 변환 할 정적 "변환"메서드를 만드는 것이 편리 할 수 ​​있습니다.

+0

직렬화 계층은 어떻게 생겼을까요? DTO를 XML로 출력하는 메소드가 있습니까? 또는 스트림을 가져 와서 직렬화 하시겠습니까? – csano

+0

그것은 내가 필요한 것에 달려 있습니다. .NET에서 많은 XML 기반 API의 패턴을 따르고 'XmlWriter'를 대상으로 삼는 경향이 있습니다. 스트림에서'XmlWriter'를 반복적으로 생성하는 호출 코드를 찾으면 스트림을 사용하는 오버로드를 추가합니다. 'XmlWriter'를 만들기 위해'XPathNavigator.AppendChild'를 사용하여 호출 코드를 찾았다면'IXmlNavigable'을 받아들이는 오버로드를 작성합니다. –

+0

감사합니다, John, 고맙습니다. – csano

관련 문제