2013-05-01 1 views
1

날씨 DTO는 반드시 POCO이어야하며 모든 기술에 따라 달라질 수 있습니다. 생각 중입니다. 느슨한 결합을 지원하는 POCO로 유지하고 모든 기술과 함께 작동하는지 확인하는 것이 좋습니다. 서비스 스택 문서에서ServiceStack 스택은 실제로 표준을 기반으로 구축됩니까?

그것은 언급한다 :

요청 및 응답 DTO의 ServiceStack에서 웹 서비스를 정의하는 데 사용되는 구현은 단지 검증과 의존성이없는 IService에서 상속 을 필요로하면서 표준 POCO의은 . 에 DTO를 별도의 의존성이없는 .dll로 유지하는 보너스로 C++/.NET 클라이언트에서 다시 사용할 수 있습니다. 강력한 형식의 API를 코드없이 사용할 수 있습니다. what-so- 이제까지. 또한 귀하의 DTO의 정의 모든 서비스 스택은 추가 사용자 정의 유물 또는 마크 업

하여 웹 서비스 을 오염하지 않습니다하지만 당신은 DTO의 실제 구현을 참조하면,이 서비스 스택에 종속성이 있습니다.

[Route("/todos")] 
[Route("/todos/{Ids}")] 
public class Todos : IReturn<List<Todo>> 
{ 
    public long[] Ids { get; set; } 
    public Todos(params long[] ids) 
    { 
     this.Ids = ids; 
    } 
} 

[Route("/todos", "POST")] 
[Route("/todos/{Id}", "PUT")] 
public class Todo : IReturn<Todo> 
{ 
    public long Id { get; set; } 
    public string Content { get; set; } 
    public int Order { get; set; } 
    public bool Done { get; set; } 
} 

설명서에 언급 된 내용과 실제로 구현 된 내용과 완전히 혼동됩니다. DTO를 기술에 의존하게 만드는 이유는 무엇보다 DTO를 깨끗하게 유지하고 기술을 독립적으로 유지하는 것이 더 좋습니다.

내 이해가 완전히 잘못된 것일 수 있습니다.

답변

3

모든 DTO에 추가 된 메타 데이터 속성은 종속성 및 묵시적인 무료 ServiceStack.Interfaces 프로젝트에 저장됩니다. DTO에 주석을다는 것은 에서 사용자 정의 경로 속성을 재사용 할 수 있고 대체 경로가 아닌 예쁜 URL을 사용하여 서비스를 호출 할 수 있다는 이점이 있습니다.

IReturn<T> 인터페이스 마커는 succinct typed API calls as seen in this answer입니다. 당신이 ServiceStack의 내장 능통 API 정의하는 사용자 정의 경로를 사용할 수

당신은 속성을 사용할 필요가 없습니다, 예컨대 :

public void Configure(Container container) 
{ 
    Routes 
     .Add<Todos>("/todos") 
     .Add<Todos>("/todos/{Id}") 
     .Add<Todo>("/todos", "POST") 
     .Add<Todo>("/todos/{Id}", "PUT"); 
} 
+0

클라이언트와의 DTO를 공유하는 가장 좋은 방법은 무엇입니까? – Brainchild

+0

DTO dll 복사 중입니다. – mythz

+0

그래서 .. 모든 클라이언트와 DTO DLL을 공유해야합니다. – Brainchild