C# 反向管道/责任链模式
我想知道是否有一个建立模式来控制我的应用程序将拥有的流 简单地说,应该是这样的:C# 反向管道/责任链模式,c#,design-patterns,pipeline,chain-of-responsibility,C#,Design Patterns,Pipeline,Chain Of Responsibility,我想知道是否有一个建立模式来控制我的应用程序将拥有的流 简单地说,应该是这样的: 用户提供一个文件 文件正在处理中 用户收到已处理的文件 比如说,将有几个处理步骤 预处理一、预处理二、预处理三和最终处理 当然,我们不控制用户提供的文件-它们将需要不同数量的预处理步骤 因为我的消息处理程序服务将在单独的API中,所以我不想调用它们只是为了返回“还不能处理”或“不需要处理”的性能原因 同样,我不想在服务之间传递上传的文件 理想情况下,我希望通过评估内容并仅插入有意义的消息处理程序来动态设计文件流
- 用户提供一个文件
- 文件正在处理中
- 用户收到已处理的文件
FinalProcessing
的条件,那么流将只是一个元素
如果文件需要从预处理两个
开始,则流程将是预处理两个
预处理三个
最终处理
所以,我想我可以实现类似的东西,但我不确定细节
public interface IMessageHandler
{
void Process(IFile file);
}
public interface IContentEvaluator
{
IList<IMessageHandler> PrepareWorkflow(IFile file);
}
public interface IPipelineExecutor
{
void ExecuteWorkflow(IList<IMessageHandler> workflow, IFile file);
}
请您提出建议、推荐一些方法或进一步阅读好吗?这是
定义
将其他职责动态附加到对象。
装饰器提供了一种灵活的替代子类化的方法来扩展
功能
那是一辆汽车吗
定义
将其他职责动态附加到对象。
装饰器提供了一种灵活的替代子类化的方法来扩展
功能
可以考虑使用模式:……在运行时选择一个算法……BR> 但是,如果您有太多的流程组合,那么需要实施的策略数量将会增加,解决方案可能会很复杂
另一种方法是使用:…将复杂的事件驱动应用程序分解为一组由队列连接的阶段…预处理一、预处理二、预处理3和最终处理是阶段,流程可以通过将传出消息定向到不同队列来定义。
可以考虑使用模式:……在运行时选择一个算法……BR> 但是,如果您有太多的流程组合,那么需要实施的策略数量将会增加,解决方案可能会很复杂
另一种方法是使用:…将复杂的事件驱动应用程序分解为一组由队列连接的阶段…预处理一、预处理二、预处理三和最终处理是阶段,可以通过将传出消息定向到不同队列来定义流
public void Start(IFile newFile)
{
var contentEvaluator = new ContentEvaluator(this.availableHandlers); // would be DI
var workflow = contentEvaluator.PrepareWorkflow(newFile);
this.executor.ExecuteWorkflow(workflow, newFile);
}