私は、DTO が POCO であるべきか、またはそれが任意のテクノロジに依存する可能性があるかについて、あまり確信が持てません。疎結合をサポートし、どのテクノロジーでも動作することを確認するには、それらを POCO として保持する方がよいと考えています。
サービススタックのドキュメントから それは言及されています:
ServiceStack で Web サービスを定義するために使用される要求と応答の DTO は標準の POCO ですが、実装はテスト可能で依存関係のない IService から継承する必要があります。DTO を別の依存関係のない .dll に保持することのボーナスとして、コード生成を一切行わずに厳密に型指定された API を提供する C#/.NET クライアントでそれらを再利用できます。また、DTO はすべてを定義します。サービス スタックは、追加のカスタム アーティファクトやマークアップで Web サービスを汚染しません。
しかし、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 をクリーンに保ち、テクノロジーに依存しない方がよいのです。
私の理解は完全に間違っているかもしれません。