我有一个复杂的审查申请提交流程,需要执行几个步骤。
ReviewService.CreateReview()
- CheckReservedTimeslotIsAvailable
- 流程支付
- 创建会议
- 插入评论
- 更新财经杂志
- 完成文件
- 通知
所有这些步骤都在 CreateReview() 方法中编码,并且变得不可读、难以管理。此外,当前的实现不支持回滚。
所以这个想法是创建一个 Orchestrator 类并构建步骤序列。如果完成所有步骤,编排器将确保创建成功的审核。如果任何步骤未能完成,则所有已完成的前面功能都将回滚以确保数据完整性。这与 Saga 模式(Orchestrated)几乎相同,但稍有变化,步骤不是微服务。
这是使用正确的模式吗?还是命令模式是一个不错的选择?请指教。
BaseOrchestrator ... 使用系统;使用 System.Collections.Generic;
/// <summary>
/// Facilitates runnning of the pipeline operations.
/// </summary>
/// <typeparam name="T">The type of object orchestrator is executed on.</typeparam>
public abstract class BaseOrchestrator<T> : IOrchestrator<T>
{
protected T data;
protected List<Action> Steps;
protected int rejectReason;
public BaseOrchestrator<T> Begin(Action stepToExecute)
{
RegisterStepToExecute(stepToExecute);
return this;
}
public BaseOrchestrator<T> Step(Action stepToExecute)
{
RegisterStepToExecute(stepToExecute);
return this;
}
public BaseOrchestrator<T> End(Action stepToExecute)
{
RegisterStepToExecute(stepToExecute);
return this;
}
public BaseOrchestrator<T> WithRollback(Action stepToExecute)
{
RegisterStepToExecute(stepToExecute);
return this;
}
protected BaseOrchestrator<T> RegisterStepToExecute(Action stepToExecute)
{
Steps.Add(stepToExecute);
return this;
}
public BaseOrchestrator<T> StepBuilder()
{
Steps = new List<Action>();
return this;
}
/// <inheritdoc/>
public void Execute(T data)
{
...
}
}
...