【问题标题】:What is the counterpart (pattern) to services on the client side?客户端服务的对应物(模式)是什么?
【发布时间】:2020-12-20 19:40:22
【问题描述】:

假设我有一个服务,它只是一个 REST-API。这个 rest api 提供了一些数据。

据我了解,这是有道理的,我可以将从该服务发送到该服务的数据封装到DTO's 中。这完全是有道理的,因为您将拥有一些业务对象,但通常您需要以某种方式对它们进行序列化。据我了解,这将是一种普遍接受且已知的抽象方式。

然后通过 REST-API 发送此 DTO。关于服务器端,它非常简单,有一些提供数据或接收数据的控制器,我没有看到任何问题(至少现在)。


所以关于我的问题。 在客户端有一些对象,它们将访问这个 API,这个对象,在我的实现中包含一个 http 客户端(不确定我是否将它们与这个对象分离)它还包含访问 api 的方法。因此,以一种或另一种方式,抽象出 http 客户端的使用并访问 API。

如何命名访问 API 的对象?

我现在将它们命名为 XXXManager/XXXHandler/...,但这些名称感觉太笼统了,我觉得必须为此制定一些约定或模式?将它们命名为 XXXService 也感觉不完全正确,因为服务对我来说就像服务器端的部分,这个对象正在访问服务。


那么您将如何命名这种对象,是否有一些更深层次的模式来处理这种服务/api 访问器?

【问题讨论】:

    标签: api design-patterns architecture software-design


    【解决方案1】:

    适用于此处的模型/模式是经典的layered architecture,其工作方式如下:

    • HttpClient 应该封装在一个类(我们将其命名为ApiClient)中,该类公开访问 REST API 的方法。在这些方法中的每一个中,httpClient 都用于执行 HTTP 调用。

    • 有一层 Service/Manager 类使用 ApiClient 并应用它们自己的业务逻辑。

    • 还有一个 UI 组件层,它还注入服务/管理器来获取数据并将其呈现在 UI 上。

    通过这种方式,您可以解耦层,从而提高代码的可伸缩性和可测试性。

    命名取决于您拥有的客户端实现/框架的类型。

    如果您有一个 Web 前端客户端,那么名称 TransactionService 会告诉我这个类与一些外部事务服务通信(Service 不是与服务器端组件相关的命名)。

    例如,此命名模型适用于Angular

    【讨论】:

      【解决方案2】:

      Patterns of Enterprise Application Architecture 建议 Gateway,但我会选择 Client

      【讨论】:

        猜你喜欢
        • 2011-02-25
        • 1970-01-01
        • 1970-01-01
        • 2021-05-04
        • 1970-01-01
        • 2021-01-07
        • 1970-01-01
        • 1970-01-01
        • 2013-02-20
        相关资源
        最近更新 更多