我想知道是否有一个建立模式来控制我的应用程序的流程。
简单地说,应该是这样的:
将有几个处理步骤,比如PreprocessingOne、PreprocessingTwo、PreprocessingThree和FinalProcessing。
当然,我们不控制用户提供的文件--它们将需要不同数量的预处理步骤。
由于我的消息处理程序服务将位于单独的API中,因此出于性能原因,我不希望仅仅为了返回“无法处理”或“不需要处理”而调用它们。
类似地,我不想在服务之间传递上传的文件。
理想情况下,我希望通过评估内容和只插入有意义的消息处理程序的内容来动态地设计文件的流。
我说的是“倒置”管道,因为与其从A到Z,我更愿意检查我需要从Z开始的哪个阶段,只插入最后一个阶段。
因此,如果上传的文件立即符合FinalProcessing的条件,那么流将仅仅是一个元素。
如果文件需要从PreprocessingTwo转到,那么流将是PreprocessingTwo > PreprocessingThree > 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);
}然后在申请中
public void Start(IFile newFile)
{
var contentEvaluator = new ContentEvaluator(this.availableHandlers); // would be DI
var workflow = contentEvaluator.PrepareWorkflow(newFile);
this.executor.ExecuteWorkflow(workflow, newFile);
}请您提出建议,推荐一些方法或进一步阅读?
发布于 2017-05-10 14:06:02
您可以考虑使用策略模式:在运行时使用...selects算法.
但是,如果你有太多的组合流比数量的策略,这需要实施将增加和解决可能是复杂的。
另一种方法可以是使用赛达:...decomposes是一个复杂的、事件驱动的应用程序,由队列连接成一组阶段.
PreprocessingOne、PreprocessingTwo、PreprocessingThree和FinalProcessing是阶段,可以通过将传出消息定向到不同的队列来定义流。
发布于 2017-05-10 12:18:58
那是装饰图案吗?
定义动态地将附加责任附加到对象。装饰器为扩展功能提供了一种灵活的子类选择。
https://stackoverflow.com/questions/43892245
复制相似问题