我正在与EF core 6.0合作一个.NET6项目.该项目是使用Clean架构和CQRS模式构建的.
我的问题更笼统,我更多地是在寻求意见,而不是直接的答案.
因此,假设我有一个从数据库中删除用户的命令.我们就叫它DeleteUserByIdCommand
吧.该命令获取用户ID并判断该用户是否存在,如果该用户存在,则将其删除.
在命令结束时,我调用context.SaveChanges()
,因此删除操作实际上是在数据库中进行的.当我添加另一个命令时,问题就来了,让我们将其命名为DeleteUsersByIdBulkCommand
.在这个命令中,为了不重复我自己,我希望使用我现有的DeleteUserByIdCommand
.新命令接受一组用户ID.但是,通过这种方式,如果我有context.SaveChanges()
个用户要删除,SaveChanges()
和GET请求将被执行context.SaveChanges()
次,这对性能非常糟糕.
对我来说,只有两个简单的 Select ,我都试过了:
- 只是不要重复使用
DeleteUserByIdCommand
,并在新代码中编写新代码.这样做的问题是,例如,如果我想要扩展命令,比如从其他数据库或第三方API中删除用户,我将不得不在两个地方更改代码. - 另一种解决方案是在
DeleteUserByIdCommand
之间有一个属性,称为ShouldCallSaveChanges
,它是布尔型的.缺省情况下它是真的,但是当我从DeleteUsersByIdBulkCommand
调用这个命令时,它将被设置为假,并且我将在Foreach之后执行SaveChanges()
.
我的问题是,对于这种情况,是否有一些严格的规定?在这里重复代码是不是有问题,或者对于这种情况可能有一些特定的解决方案.我想听取您的意见或您可能有的其他建议:)