什么类型的实现会更适合服务层?
What type of implementation will be more suitable in service layer?
我正在开发一个新的微服务应用程序,它将成为具有许多其他微服务的大架构的一部分。这个应用程序需要从其他应用程序获取内容,我想将 HTTP 调用封装到服务层。但我注意到有两种不同的方法。
假设我的应用程序将从另一个部署为 User API.
的微服务获取联系信息
企业文件
此方法将公司名称作为文件名。在文件中,只有一个 public 方法,即 get
并且它接收一个参数。该方法调用 user-api/contact/{id}
.
文件名: contact.service.js
方法:get(id) -> contact
API 作为文件
这种方法将 用户 API 和消费者应用程序之间的所有通信封装到一个文件中。为 User API.
提供的每个端点都有一个方法
文件名: user.service.js
方法:getContact(id) -> contact
使用这些方法的优缺点是什么?
这个问题其实更像是一个意见问题,不同的公司/不同的软件开发商可能会给你不同的答案。
我对此的看法是,我认为将它们拆分成各自的文件——如果逻辑很复杂,甚至拆分到方法——对可维护性/测试有很大帮助。
- 测试:如果您在测试文件中使用相同的拆分模式 - 我在结构方面模仿我们的代码并这样做,我发现它可以帮助人们更轻松地找到代码,完全按照他们想要的方式执行测试执行他们。
Something like test contact.service.test.js
更改被隔离,他们可以非常轻松地 运行 立即进行相关测试。
- 可维护性:我尽量在最后一个服务层中保持尽可能小的东西。这并不是说一切都是抽象的,一层又一层你找不到真正的代码/但即便如此,我也会将服务拆分为不同文件中的方法,名称非常方便。通过这种方式,文档制作非常简单,您只需将所有需要的内容写在同一个文件中即可。
- 代码审查:变得容易得多,它强制每个文件中的更改很小,因为您的文件内容少得多。
问自己这些问题;
您的服务中是否包含非常复杂的逻辑,这会将文件扩展到数千行 - 使其更难记录/更难发现错误/更难重构?或者它们是较小的端点,逻辑被卸载到系统的其他部分?
这些方法/服务的测试是否将存在于(另一个)单个文件中 - 模仿服务实现中的模式?您可以在测试功能时调用单独的测试吗?
您准备好适应您在所有服务中做出的决定了吗?您的特定服务因此那个确切的文件可能相对较小,那么您的一位同事可能编写并变成一个巨大的 1K 行文件的服务呢?
我正在开发一个新的微服务应用程序,它将成为具有许多其他微服务的大架构的一部分。这个应用程序需要从其他应用程序获取内容,我想将 HTTP 调用封装到服务层。但我注意到有两种不同的方法。
假设我的应用程序将从另一个部署为 User API.
的微服务获取联系信息企业文件
此方法将公司名称作为文件名。在文件中,只有一个 public 方法,即 get
并且它接收一个参数。该方法调用 user-api/contact/{id}
.
文件名: contact.service.js
方法:get(id) -> contact
API 作为文件
这种方法将 用户 API 和消费者应用程序之间的所有通信封装到一个文件中。为 User API.
提供的每个端点都有一个方法文件名: user.service.js
方法:getContact(id) -> contact
使用这些方法的优缺点是什么?
这个问题其实更像是一个意见问题,不同的公司/不同的软件开发商可能会给你不同的答案。
我对此的看法是,我认为将它们拆分成各自的文件——如果逻辑很复杂,甚至拆分到方法——对可维护性/测试有很大帮助。
- 测试:如果您在测试文件中使用相同的拆分模式 - 我在结构方面模仿我们的代码并这样做,我发现它可以帮助人们更轻松地找到代码,完全按照他们想要的方式执行测试执行他们。
Something like test contact.service.test.js
更改被隔离,他们可以非常轻松地 运行 立即进行相关测试。 - 可维护性:我尽量在最后一个服务层中保持尽可能小的东西。这并不是说一切都是抽象的,一层又一层你找不到真正的代码/但即便如此,我也会将服务拆分为不同文件中的方法,名称非常方便。通过这种方式,文档制作非常简单,您只需将所有需要的内容写在同一个文件中即可。
- 代码审查:变得容易得多,它强制每个文件中的更改很小,因为您的文件内容少得多。
问自己这些问题;
您的服务中是否包含非常复杂的逻辑,这会将文件扩展到数千行 - 使其更难记录/更难发现错误/更难重构?或者它们是较小的端点,逻辑被卸载到系统的其他部分?
这些方法/服务的测试是否将存在于(另一个)单个文件中 - 模仿服务实现中的模式?您可以在测试功能时调用单独的测试吗?
您准备好适应您在所有服务中做出的决定了吗?您的特定服务因此那个确切的文件可能相对较小,那么您的一位同事可能编写并变成一个巨大的 1K 行文件的服务呢?