我们正在使用MediatR实现dotnet core WebAPI后端的“Pipeline”,尝试遵循CQRS原则。我无法决定是否应该尝试实现一个“IPipelineBehavior”链,或者是否更好地构建一个新请求并从处理程序方法(用于请求)中调用MediatR.Send。
场景基本如下: 1. 用户请求执行某个操作,例如删除某些内容。 2. 我们必须检查是否有其他人在使用这些内容。 3. 我们必须将这些内容标记为已删除。 4. 我们必须从文件系统中实际删除这些文件。
我们现在采用的是“Option 1”:一个“DeleteRequest”由一个类处理,在其中处理程序检查它是否正在使用,将其标记为已删除,然后发送一个带有参数的新“TaskStartRequest”以进行删除。
我正在考虑的是“Option 2”:一个“DeleteRequest”实现了标记接口“IRequireCheck”、“IStartTask”,具有运行以下流程的管道: 1. 首先使用“IPipelineBehavior<IRequireCheck>”检查是否正在使用某些内容。 2. 使用“IPipelineBehavior<DeleteRequest>”将这些内容标记为已删除。 3. 使用“IPipelineBehavior<IStartTask>”启动任务。
我还没有完全想清楚Option 2会是什么样子,但这是大致的想法。我主要想知道,在处理程序中为TRequest1调用MediatR.Send(TRequest2)是否属于代码异味。
场景基本如下: 1. 用户请求执行某个操作,例如删除某些内容。 2. 我们必须检查是否有其他人在使用这些内容。 3. 我们必须将这些内容标记为已删除。 4. 我们必须从文件系统中实际删除这些文件。
我们现在采用的是“Option 1”:一个“DeleteRequest”由一个类处理,在其中处理程序检查它是否正在使用,将其标记为已删除,然后发送一个带有参数的新“TaskStartRequest”以进行删除。
我正在考虑的是“Option 2”:一个“DeleteRequest”实现了标记接口“IRequireCheck”、“IStartTask”,具有运行以下流程的管道: 1. 首先使用“IPipelineBehavior<IRequireCheck>”检查是否正在使用某些内容。 2. 使用“IPipelineBehavior<DeleteRequest>”将这些内容标记为已删除。 3. 使用“IPipelineBehavior<IStartTask>”启动任务。
我还没有完全想清楚Option 2会是什么样子,但这是大致的想法。我主要想知道,在处理程序中为TRequest1调用MediatR.Send(TRequest2)是否属于代码异味。