简单的ServiceStack DTO到DomainModel映射

本文关键字:DomainModel 映射 DTO ServiceStack 简单 | 更新日期: 2023-09-27 18:02:15

我试图集成ServiceStack c#客户端连接到后端(REST)。FTR,我在一个PCL库中,使用MvvMCross作为Xamarin之上的框架(如果有任何兴趣)

基本通信正在工作,但现在我必须映射响应模型(dto ?)到我在应用程序中使用的DomainModels

我现在很困惑ServiceStack提供什么,当DTO和DomainModel是不同的。有关于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;
}

现在我想映射名称到标题和酒吧foo当使用ServiceStack客户端。我现在不确定如何在ServiceClient中加入"响应"的概念。x API与DTO本身相比(它应该是相同的吗?)

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

我的具体问题是:我应该用ServiceStack做什么?-我应该使用AutoMapper与Mapper。创建/Mapper。从DTO/toDTO转换映射?-我是否混淆了术语(所以我的问题很难理解甚至太复杂?)

我读了一些关于service-stack的文章,包括关于servicestack/wiki和google资源的文档——我似乎不明白这一点。

谢谢!

简单的ServiceStack DTO到DomainModel映射

我建议您浏览一些现有的示例。

Email Contacts是一个很好的开始示例,因为它带您从头开始使用推荐的结构创建ServiceStack解决方案,即将所有数据传输对象(dto)放在一个单独的程序集中,例如Project.ServiceModel

许多ORM(如OrmLite)允许您在首选的RDBMS中持久化POCO,因此在许多情况下,您可以直接在数据库中持久化填充的DTO。但是,当您的dto和数据模型的模式出现分歧时,映射它们是一个好主意,内置的自动映射很容易让您这样做。

调用服务时,通常不需要指定任何url,因为当你传入填充的请求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 });