在IReturn中使用接口作为模板的ServiceStack

本文关键字:ServiceStack 接口 IReturn | 更新日期: 2023-09-27 18:02:05

我有一个关于IReturn的问题。我发现

"接口绝对不是定义服务接口的完美有效方式"。

但是,尽管有这样做的需要或想法。有没有办法做到这一点,而不会得到一个异常关于创建抽象类?

在IReturn<T>中使用接口作为模板的ServiceStack

您引用的内容可能是指WCF使用接口定义服务的方法。WCF促进了几种服务反模式,但这句话与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>标记,唯一有效的理由,你不会如果你的服务返回多个不同的响应类型,但这本身是一个反模式和错误的来源,只有在运行时才能检测到,即最坏的一种。