我对IReturn有疑问。 我发现了
"接口绝对不是定义服务接口的完美有效方式"。
但是,尽管如此,仍然有需要或想法这样做。 如果没有关于创建抽象类的例外,有没有办法做到这一点?
答案 0 :(得分:5)
您引用的内容可能是指WCF使用接口定义服务的方法。 WCF promotes several service anti-patterns,但这个引用与ServiceStack的IReturn<T>
接口标记完全无关,这是一个良性接口,其唯一目的是启用简洁的类型API,而无需定义返回类型呼叫站点,例如:
CustomerResponse response = client.Get(new GetCustomer { Id = 1 });
如果请求DTO没有IReturn<T>
标记,则每个客户端都需要在呼叫站点上定义返回类型,例如:
CustomerResponse response = client.Get<CustomerResponse>(new GetCustomer { Id = 1 });
这是不必要的并且是人为错误的潜在来源,因为客户端需要为每个服务提供正确的响应类型,而如果返回类型仅在服务器上定义一次(即权威来源),则所有客户端将自动使用正确的回复类型,因为它已嵌入到请求DTO合同中 - 因为它定义了您的公共服务合同的一部分,所以它是正确的地方。
没有充分的理由说明您不会包含IReturn<T>
标记,这是您的服务返回多个不同的响应类型时唯一合理的原因,但这本身就是一个反模式和错误源只能在运行时检测到,即最差的类型。