8

我们正在构建 ServiceStack 的第一个小型实现,我们需要对位于客户端和服务器之间共享的单独程序集中的 DTO 进行一些说明。

新 API 的 WIKI 页面为 DTO 推荐以下内容

在服务开发中,您的服务 DTO 提供了与技术无关的服务层,您希望保持清洁并尽可能“无依赖”,以实现最大的可访问性和潜在的重用。我们的建议是将您的服务 DTO 保留在一个单独的、很大程度上无 dep 的程序集中。

还有这个片段

*但是,假设您采用复制 DTO 的正常路线(以二进制形式的任一源),因此您在客户端上有这样的东西:

[Route("/reqstars")]
public class AllReqstars : IReturn<List<Reqstar>> { }

The code on the client now just becomes:

var client = new JsonServiceClient(BaseUri);
List<Reqstar> response = client.Get(new AllReqstars());

它向 /reqstars 路由发出 GET Web 请求。当客户端上不存在自定义路由时,它会自动回退到使用 ServiceStack 的预定义路由。

我的问题是……由于 DTO 类的路由属性,“很大程度上无依赖”的程序集是否仍然需要对 ServiceStack 的依赖?

4

1 回答 1

7

[Route]属性存在于ServiceStack.Interfaces项目中,因此您仍然只需要对依赖项和 impl-free ServiceStack.Interfaces.dll的引用。这是设计使然,我们希望确保尽可能减少依赖关系,这就是为什么我们将尝试保留您可能在 Interfaces 项目中的 DTO 上使用的所有元数据属性。

想要将 DTO 保存在单独的程序集中的原因是为了减少客户使用它所需的依赖关系。这使其侵入性更小,客户更容易访问。此外,您的 DTO 代表您的服务合同,将它们分开会鼓励将它们与实现分离的良好实践,您希望继续自由地对其进行重构。

于 2012-11-30T17:53:48.473 回答