在哪个 API 层 (repository/service) 中放置自定义 SQL 查询逻辑?
In which API layer (repository/service) to place custom SQL queries logic?
我正在构建一个 API,其中我需要的数据与它的持久化方式有很大不同(对于每次访问数据库,我都在进行 5-10 次连接,但我不能通过代码执行它们,因为它花费的时间太长了)。
我正在使用控制器-服务-存储库架构,并且我在多个来源中读到存储库应该只包含基本的 CRUD 操作。
鉴于此:
- 它们应该处于存储库级别还是服务级别?
- 是否有其他更适合此用例的代码结构方式?
使用标准的 N 层架构(在您的情况下,N=3,最常见),“自定义”SQL 代码当然会进入最低层,即存储库。
我现在的建议是不要将那些 SQL 查询保留在您的代码中,而是将它们移动到存储过程中。您将获得很多好处,而不仅仅是性能。
存储库应包含您需要的方法。创建适当的抽象并免费生活:)
另一种选择是使用 CQRS,我总是强烈建议在系统通过简单的 CRUD 时使用它。
我正在构建一个 API,其中我需要的数据与它的持久化方式有很大不同(对于每次访问数据库,我都在进行 5-10 次连接,但我不能通过代码执行它们,因为它花费的时间太长了)。
我正在使用控制器-服务-存储库架构,并且我在多个来源中读到存储库应该只包含基本的 CRUD 操作。
鉴于此:
- 它们应该处于存储库级别还是服务级别?
- 是否有其他更适合此用例的代码结构方式?
使用标准的 N 层架构(在您的情况下,N=3,最常见),“自定义”SQL 代码当然会进入最低层,即存储库。
我现在的建议是不要将那些 SQL 查询保留在您的代码中,而是将它们移动到存储过程中。您将获得很多好处,而不仅仅是性能。
存储库应包含您需要的方法。创建适当的抽象并免费生活:)
另一种选择是使用 CQRS,我总是强烈建议在系统通过简单的 CRUD 时使用它。