处理Web服务中的公共实体的最佳方法是什么

时间:2017-02-08 13:58:03

标签: .net web-services wcf asp.net-web-api architecture

简单的场景。用户/订阅订阅具有0-N个用户,反之亦然。

UserService:

Subscriptions/GetSubscriptionsUser(subscriptionId) : List<Users>
Subscriptions/GetSubscriptions() : List<Subscriptions>

SubscriptionService:

(int a, int n, int k)

例如,将这些服务引用添加到项目时 SubscriptionService.Subscriptions和UserService.Subscriptions - 同样适用于用户

但用户是常见的实体。对此最好的方法是什么?

直觉上我想要同一个班级,但也许那会过度工程?

如果我要制作一种类型将如何实施?

1 个答案:

答案 0 :(得分:1)

当您开始设计此应用程序时,您显然觉得需要将用户和订阅分成两个不同的服务。你没必要。你可以让订阅成为用户的属性,反之亦然,但你没有做过;你把他们分开了。

导致您做出此设计选择的原因可能是正确的 - 您希望能够将您的系统视为由不同服务组成,并且能够对用户进行更改,而不会影响订阅。这些都是好事。

但是,您已经通过设计服务操作的方式阻止了它的运行。您有属于一个域实体的操作返回另一个实体。一旦你这样做,你实际上是在撤消你把它们分开的所有工作。

我建议重新实现您的服务操作,如下所示:

Users/GetUsers() : List<Users>
Users/GetUsersBySubscriptionId(int subscriptionId) : List<Users>

Subscriptions/GetSubscriptions() : List<Subscriptions>
Subscriptions/GetSubscriptionsByUserId(int userId) : List<Subscriptions>

这样,Users服务只返回用户,而Subscriptions服务只返回订阅。这允许这些操作的使用者也分别处理用户和订阅。