【问题标题】:JsonServiceClient methods and IReturnJsonServiceClient 方法和 IReturn
【发布时间】:2013-09-25 11:31:07
【问题描述】:

在我们的团队中,我们使用请求和响应 DTO,通过我们的业务逻辑程序集层次结构(在隔离的 DB DTO 之外)。

我们要求在业务逻辑层没有 SS 依赖。

所以我们不使用 IReturn 或 IReturnVoid 接口。我们只使用没有继承的简单 c# 对象。

至于路由,我们在 AppHost.Configure 中使用Fluent API,本质上是创建一个路由表。

在我们的例子中,ServiceStack 表现得非常好。

我们的 Service.Model 可以从业务逻辑层使用,没有依赖关系。

服务函数实际上是一个瘦包装器,调用业务逻辑函数,返回响应 DTO。

但是 JsonServiceClient.Get 函数只接受 IReturn 对象作为参数,或者直接接受 URI。

它不接受对象作为参数,例如 Post 函数。

有什么建议吗?

更新 1

神话

关于 IReturn,不幸的是,在我们的案例中,有一些需求没有在业务逻辑模块中使用,

即使是较轻的 SS 依赖项。

服务功能是一个调用业务模块的瘦包装器。

两层之间的链接只是请求和响应 DTO。我们非常喜欢这种方法。

是的,它们是“消息操作”,但它们也用作应用层之间的消息。

另外,我的客户主要是 Jquery Ajax,而不是 C#。由于移动端,绝大多数倾向于Jquery Ajax。

因此,在我们的例子中,我们只能使用对象,而不是用 IReturn 标记。 ServiceStack 的表现非常好。

【问题讨论】:

标签: servicestack


【解决方案1】:

API 仅接受 IReturn<TResponse> 以明确表示它仅接受并使用请求 DTO,而不仅仅是任何 DTO 或对象。请求 DTO 是“消息操作”,不应重复用于其他任何事情,DTO 类型可以,但不是请求 DTO,它是您的 external facing service contract,不应与任何其他问题耦合。

[Route]IReturn<T>[Api][Restrict] 等 DTO 属性只是 C# 中无法表达的额外元数据,但就像定义 DTO 属性的类型一样,它仍然是描述服务的元数据,如果您将它们归于 DTO,那么它们也可以在客户端上共享和自省。例如。 ServiceClients 将只能使用[Route] 定义的自定义路由,因为这是客户端拥有的唯一信息,如果没有,它将最终退回使用预定义的路由。

ServiceStack 鼓励定义IReturn<T> 标记,因为它允许您通过查看请求 DTO 来推断更多关于服务的信息,确保服务被限制返回相同的类型(良好实践)并集中服务返回的内容而不是分散不同的(更详细/非 DRY)调用站点,这也意味着如果您更改服务返回的响应,您将获得关于哪些调用站点需要更新的编译器反馈。不是每个人都知道这个信息/行为,这就是为什么 ServiceStack 想要通过鼓励使用 IReturn<T> 标记来鼓励这个“成功的坑”开发,所以不是每个人都必须这样做。

至于依赖项,您的 DTO 应该需要引用的唯一依赖项是 ServiceStack.Interfaces.dll,它特意是一个轻量级、无 impl 的 dll。在 v3 中,这需要引用 ServiceStack.Common NuGet pkg,但对于 v4,我们将提供独立的 ServiceStack.Interfaces NuGet pkg 提供您的 DTO 可以引用的最小/最轻的依赖项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-29
    相关资源
    最近更新 更多