【发布时间】:2016-01-08 11:15:21
【问题描述】:
在阅读了一些 ServiceStack wiki 之后,我遇到了关于 DTO 的问题,希望您能提供帮助。
维基说:
在服务开发中,您的服务 DTO 为您提供与技术无关的服务层,您希望保持清洁并尽可能“无依赖”,以实现最大的可访问性和潜在的重用。我们的建议是将您的服务 DTO 保留在一个单独的、很大程度上无 dep 的程序集中。 (https://github.com/ServiceStack/ServiceStack/wiki/New-API)
最后,您还可以使用之前更明确的客户端 API(当您没有 IReturn 标记时非常理想): (https://github.com/ServiceStack/ServiceStack/wiki/New-API)
根据以上原因,我认为ServiceStack的最佳实践是: 我们应该使用 POCO 请求响应 DTO,而不是继承自 IReturn。?
例如:
我们应该使用 1#:
public class AuthenticationRequest
{
public string Name { get; set; }
public string Password { get; set; }
}
public class AuthenticationResponse
{
public AuthenticationResponseType Result { get; set; }
public UserInfoDto UserInfo { get; set; }
}
我们不应该使用 2#:
using ServiceStack;
public class AuthenticationRequest : IReturn<AuthenticationResponse>
{
public string Name { get; set; }
public string Password { get; set; }
}
public class AuthenticationResponse
{
public AuthenticationResponseType Result { get; set; }
public UserInfoDto UserInfo { get; set; }
}
因为1#是零依赖,所以2#对ServiceStack库/框架有依赖。
如果我将所有 Request-Response DTO 打包到一个 NET DLL 中,1# 比 2# 更抽象!
这意味着: 如果将来有一天我决定不使用 ServiceStack,这个 DLL 不需要任何更改。 (ServiceStack 库/框架应该是 Infrastructure 而不是 Abstraction)
如果我错了,请纠正我。
非常感谢。
【问题讨论】:
标签: dependency-injection architecture domain-driven-design servicestack dto