Nestjs 在提供程序级别上运行事务类型?

Nestjs 在提供程序级别上运行事务类型?,nestjs,typeorm,Nestjs,Typeorm,我有两个表账户和地址帐户依赖于地址含义要创建帐户,必须先创建地址,然后获取其地址.id 如果地址创建失败或帐户创建失败,我不能依赖我的数据库 因此,我必须运行一个事务 如果我在我的提供者中运行一个事务,该类注入所有必需的服务,以便执行我需要的操作,即帐户创建,在我的情况下,它使用地址服务和帐户服务,我被告知这是一种反模式,因为事务和与数据库相关的一切都必须在存储库中运行 但是怎么做呢?我必须在两个不同的存储库中运行操作addressRepository和accountRepository 当您在

我有两个表
账户
地址
<代码>帐户依赖于
地址
含义要创建
帐户
,必须先创建
地址
,然后获取其
地址.id

如果
地址
创建失败或
帐户
创建失败,我不能依赖我的数据库

因此,我必须运行一个事务

如果我在我的提供者中运行一个事务,该类注入所有必需的服务,以便执行我需要的操作,即帐户创建,在我的情况下,它使用
地址服务
帐户服务
,我被告知这是一种反模式,因为事务和与数据库相关的一切都必须在
存储库中运行

但是怎么做呢?我必须在两个不同的存储库中运行操作
addressRepository
accountRepository


当您在两个不同的服务上使用多个存储库时,启动和提交事务的最佳做法是什么?

我建议您创建另一个服务(AddressAccountService),并且仅在使用这两个实体的操作中使用此服务,我认为这是最安全的方法


在服务方法上,我没有看到在存储库逻辑中添加层的任何反模式,正如我所看到的,将存储库分离为服务使系统更具可伸缩性和可维护性,因为您可以防止代码重复,甚至可以阻止对项目中不同位置的访问,您不希望他们在没有控制的情况下修改数据库,它甚至可以防止将来,如果您想要更改为不同的DBMS或甚至ORM,您只需更改CRUD操作的依赖关系,而不必更改CRUD操作的整个实体逻辑。例如,假设在应用程序的早期开发中,您决定在用户需要时硬删除数据库中的所有行,当系统开始增长时,您检测到删除操作不是最安全的操作,因为您得到了大量级联删除,并且在某些情况下删除一行需要花费很长时间(我在这里有点夸张),然后您希望将其更改为软(更新标记)删除,如果您打算将存储库用于所有操作,这将是一个令人头痛的问题,因为您需要更改使用存储库的代码的每一部分及其级联关系,我们不仅仅讨论删除操作,您必须注意选择更新,甚至在查找唯一属性的插入上。在服务方法中,您可以更改可用于不同控制器的操作逻辑,也就是说,您甚至可以创建另一个服务并替换依赖项。

我建议您创建另一个服务(AddressAccountService)而且只有在使用这两个实体的操作中才能使用此服务,我认为这是最安全的方法

在服务方法上,我没有看到在存储库逻辑中添加层的任何反模式,正如我所看到的,将存储库分离为服务使系统更具可伸缩性和可维护性,因为您可以防止代码重复,甚至可以阻止对项目中不同位置的访问,您不希望他们在没有控制的情况下修改数据库,它甚至可以防止将来,如果您想要更改为不同的DBMS或甚至ORM,您只需更改CRUD操作的依赖关系,而不必更改CRUD操作的整个实体逻辑。例如,假设在应用程序的早期开发中,您决定在用户需要时硬删除数据库中的所有行,当系统开始增长时,您检测到删除操作不是最安全的操作,因为您得到了大量级联删除,并且在某些情况下删除一行需要花费很长时间(我在这里有点夸张),然后您希望将其更改为软(更新标记)删除,如果您打算将存储库用于所有操作,这将是一个令人头痛的问题,因为您需要更改使用存储库的代码的每一部分及其级联关系,我们不仅仅讨论删除操作,您必须注意选择更新,甚至在查找唯一属性的插入上。在服务方法中,您可以更改操作中的逻辑,这些操作可用于不同的控制器,也就是说,您甚至可以创建另一个服务并替换依赖项