首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >倒置管道/责任链模式

倒置管道/责任链模式
EN

Stack Overflow用户
提问于 2017-05-10 12:15:45
回答 2查看 770关注 0票数 0

我想知道是否有一个建立模式来控制我的应用程序的流程。

简单地说,应该是这样的:

  • 用户提供一个文件
  • 文件正在处理中
  • 用户接收已处理的文件

将有几个处理步骤,比如PreprocessingOne、PreprocessingTwo、PreprocessingThree和FinalProcessing。

当然,我们不控制用户提供的文件--它们将需要不同数量的预处理步骤。

由于我的消息处理程序服务将位于单独的API中,因此出于性能原因,我不希望仅仅为了返回“无法处理”或“不需要处理”而调用它们。

类似地,我不想在服务之间传递上传的文件。

理想情况下,我希望通过评估内容和只插入有意义的消息处理程序的内容来动态地设计文件的流。

我说的是“倒置”管道,因为与其从A到Z,我更愿意检查我需要从Z开始的哪个阶段,只插入最后一个阶段。

因此,如果上传的文件立即符合FinalProcessing的条件,那么流将仅仅是一个元素。

如果文件需要从PreprocessingTwo转到,那么流将是PreprocessingTwo > PreprocessingThree > FinalProcessing

所以,我想我可以实现这样的东西,但我不确定细节。

代码语言:javascript
运行
复制
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);
   }

然后在申请中

代码语言:javascript
运行
复制
public void Start(IFile newFile)
{
    var contentEvaluator = new ContentEvaluator(this.availableHandlers); // would be DI
    var workflow = contentEvaluator.PrepareWorkflow(newFile);
    this.executor.ExecuteWorkflow(workflow, newFile);

}

请您提出建议,推荐一些方法或进一步阅读?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-10 14:06:02

您可以考虑使用策略模式:在运行时使用...selects算法.

但是,如果你有太多的组合流比数量的策略,这需要实施将增加和解决可能是复杂的。

另一种方法可以是使用赛达:...decomposes是一个复杂的、事件驱动的应用程序,由队列连接成一组阶段.

PreprocessingOne、PreprocessingTwo、PreprocessingThree和FinalProcessing是阶段,可以通过将传出消息定向到不同的队列来定义流。

票数 2
EN

Stack Overflow用户

发布于 2017-05-10 12:18:58

那是装饰图案吗?

定义动态地将附加责任附加到对象。装饰器为扩展功能提供了一种灵活的子类选择。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43892245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档