【问题标题】:How to implement "SQL Transactions" in "Clean Architecture"?如何在“清洁架构”中实现“SQL 事务”?
【发布时间】:2020-09-16 23:45:53
【问题描述】:

我正在开发一个基于 Express (Nodejs) 的 API,该 API 使用 MySQL 进行数据持久性。我试图遵循 R.C. 爵士提出的 CLEAN ARCHITECTURE。马丁。

长话短说:-

有一些作物供应商和一些用户。用户可以向供应商请求一些具有定义数量的作物的订单。这会将订单置于 PENDING 状态。然后供应商将确认他/她从用户那里得到的订单。

域/实体 -> CROP、用例 -> 添加、删除、编辑、查找、更新数量

域/实体 -> 订单、用例 -> 请求、确认、取消

我必须实现确认订单功能

  • 我的数据库中有已记录的订单,其中包含已订购商品列表(订单处于待处理状态)
  • 现在在确认订单操作时,我需要从数据库记录中存在的相应作物中减去每个项目数量,并检查没有值变为负数(即没有订购数量超过当前数量)
  • 如果“交易覆盖”下的所有项目都完成了,那么我必须提交交易
  • 否则恢复到以前的状态(即回滚)

我知道如何使用“Sequelize”来运行 Mysql 特定的事务,但是有很多耦合和糟糕的源代码架构。 (如果我那样做,那么 DB 就不再像插件了)

我无法理解如何在维护架构的同时执行此操作,以及在哪个层实现此事务、用例/数据访问或什么?

提前致谢

【问题讨论】:

  • 建议分享您与问题一起完成的代码/工作的快照(不是图像,而是代码本身)。这将有助于找出可以做得更好的地方。
  • 这几乎读起来像是一项主观任务——了解整个用例,然后项目代码来验证你的“紧密耦合”和“糟糕代码”的假设。建议 - 在 SO 上,您应该专注于提出非常具体的问题。在你最初的研究和努力之后也是如此。

标签: mysql node.js transactions sequelize.js clean-architecture


【解决方案1】:

我建议使用“工作单元”模式将事务保持在“适配器层”中。这样,数据库仍然是业务逻辑的插件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 2021-02-12
    • 2022-10-14
    • 1970-01-01
    • 1970-01-01
    • 2021-01-05
    • 2018-06-15
    相关资源
    最近更新 更多