api - 在哪个 API 层(存储库/服务)中放置自定义 SQL 查询逻辑?
问题描述
我正在构建一个 API,其中我需要的数据与它的持久化方式有很大不同(对于对数据库的每次访问,我正在执行 5-10 次连接,但我无法通过代码执行它们,因为它花费的时间太长)。
我正在使用控制器服务存储库架构,并且我已经阅读了几个来源,存储库应该只包含基本的 CRUD 操作。
鉴于这种:
- 他们应该在存储库或服务级别吗?
- 有没有其他更适合这个用例的结构化代码方式?
解决方案
使用标准的 N 层架构(在您的情况下 N=3,最常见),“自定义”SQL 代码当然会进入最低层,即存储库。
我现在的建议是不要将这些 SQL 查询保留在代码中,而是将它们移动到存储过程中。您将获得大量好处,而不仅仅是性能。
存储库应包含您需要的方法。创建适当的抽象并免费生活:)
另一种选择是使用 CQRS,当系统通过简单的 CRUD 时,我总是强烈建议使用它。
推荐阅读
- java - 如何查找重复的数组列表对象并将少数字段与唯一键合并
- java - MapStruct 映射不相关的相似类
- java - 查找字符串中打开的闭合 html 标记的数量
- c++ - 尝试在 C++ 中实现固定大小的队列时出现分段错误
- drag-and-drop - PyQt5 使用来自另一个文件的 Drop_groupBox()
- r - 找出组中的所有列在 R 中是否一致
- tensorflow - 如何在 nan loss 训练中失败?
- r - 对列求和并除以 r 中行中非零值的数量
- java - 无法通过 python 脚本和 chaquopy 在 android 中为 stanfordtagger 启动 java.exe
- git - 在 ubuntu 中安装期间找不到包 git