API 架构 - 业务逻辑与路由紧密耦合?

API Architecture - Business logic tightly coupled to routes?

为了加快我的下一个 Node-API 的开发速度,我一直在寻找合适的框架。过去我只用 express 构建我的 APIs。

我一直觉得有用的一种设计模式是将业务逻辑与服务中的路由处理完全分开。这些服务只接受所需的信息(如用户 ID 或数据)和 return 解决操作结果的承诺。

这样可以很容易地在其他路由中重用这些服务,组合它们,测试它们,或者根据时间表或其他事件调用它们——完全独立于端点调用。路由和中间件负责访问控制、错误处理和响应。

查看这些框架(sailsjs、keystonejs 等)的文档,我主要看到业务逻辑与各个路由紧密耦合,直接接受请求对象并处理响应。只是作为事后的想法,有时似乎提供了一种将 "often used code" 提取到辅助函数中的方法。

我错过了什么吗?这个图案怎么好像是API设计的标准?这是最佳做法吗?

这可能与 Node.js 服务规模较小有关。如果您来自企业背景,那么您很清楚将业务逻辑与控制器代码混合不会长久 运行。也许小型项目可以违抗这一点,但一旦规模增加,你就无法避开物理定律。最好分离关注点并保持代码库可维护。

我还要在服务下方添加,最好有一个单独的层来处理与外部进程边界的对话。这样,您可以通过为集成提供适当的测试替身来单独测试业务逻辑。下面是关于它在 Node 项目中如何工作的更详细的解释:Organize Node.js API project using 3-layer architecture.