简单的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资源的文档——我似乎不明白这一点。
谢谢!
我建议您浏览一些现有的示例。
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 });