简单的ServiceStack DTO到DomainModel映射

时间:2014-05-08 11:19:29

标签: c# rest servicestack automapper mvvmcross

Iam尝试集成ServiceStack C#客户端以连接到后端(REST)。 FTR,iam在PCL库中,使用MvvMCross作为Xamarin之上的框架(如果有任何intereset)

基本通信正在运行,但现在我必须将响应模型(DTO?)映射到我在应用程序中使用的DomainModels。

当DTO和DomainModel不同时,我现在对ServiceStack提供的内容感到非常困惑。有关AutoMapper的讨论,或使用ConvertTo或DynamicModel时它的相关性。

万一,我觉得只是有一个误解DTO应该是什么,所以不要介意我,如果我混淆了什么,生病的尝试适应:)

让我说我的DomainModel看起来像

public class Checkout {
   public int id;
   public String title;
   public String foo;
}

响应DTO看起来像这样(在json中)

public class CheckoutDto {    
   public int id;
   public String name;
   public String bar;
}

现在我想在使用ServiceStack客户端时将名称映射到title和bar到foo。 Iam现在不确定如何结合"响应"在ServiceClient 4.x API中与DTO本身相比(它应该是相同的吗?)

_restClient.Get<CheckoutResponse>("/checkout/1");

我的具体问题是:   - 我应该用ServiceStack采取什么赌注方法?   - 我应该使用AutoMapper和Mapper.Create / Mapper.Map从DTO / toDTO转换吗?   - 我是否混淆了术语(所以我的问题很难理解,甚至很复杂?)

我已经阅读了有关此主题的服务堆栈上的几篇帖子,包括servicestack / wiki上的文档以及googles资源 - 我似乎不明白这一点。

谢谢!

1 个答案:

答案 0 :(得分:2)

我建议walking through some the existing examples

Email Contacts是一个很好的例子,因为它引导您使用recommended structure从头开始创建ServiceStack解决方案,即将所有数据传输对象(DTO)放在一个单独的程序集中,例如: Project.ServiceModel

许多ORM(如OrmLite)允许您将POCO保存在首选的RDBMS中,因此在很多情况下,您可以将已填充的DTO直接保存在数据库中。但是当你的DTO和数据模型的模式发生分歧时,最好对它们进行映射,built-in Auto-Mapping可以让你轻松地进行映射。

在调用服务时,您通常不需要在使用ServiceStack's typed C# Service Clients时指定任何URL,因为当您传入填充的Request DTO时它将自动使用首选路由,例如:

[Route("/checkout/{Id}")]
public class Checkout : IReturn<CheckoutResponse>
{
   public int Id { get; set; }
   public String Title { get; set; }
   public String Foo { get; set; }
}

然后,您可以在客户端使用上述请求DTO,如:

var client = new JsonServiceClient(BaseUrl);
CheckoutResponse response = client.Get(new Checkout { Id = 1 });