设计模式处理瀑布处理

问题描述 投票:0回答:2

所以,想象意大利面条代码。任务应该从1到2再到3,等等。如果任务中断,则中止程序。我可以用程序方式编写这个,但想知道是否有一个设计模式。

我看了责任链,但它不合适。我已经知道哪个进程应该处理每个任务。 Master / Worker也不合适,因为它需要逐步处理。

手头的具体问题是 - 允许用户上传Excel文件,将文件与数据库表结构进行比较,然后更新数据库。

步骤将是:

  1. 上传文件 - 验证文件是否已上传,如果没有,则返回。
  2. 验证该文件是否为excel文件,如果没有,则返回。
  3. 将文件读入数据表,如果错误,则返回。
  4. 从数据库中获取数据表,如果错误,则返回。
  5. 将每个数据表加载到相应的2D数组中,如果错误,则返回。
  6. 比较每个数组是否有相同数量的列,如果错误,则返回。等等等......

有没有办法为此使用设计模式?谢谢。

c# excel oop design-patterns
2个回答
1
投票

有一个设计模式来解决这种情况,它是众所周知的:Pipeline或MSDN称之为Pipes and Filters Pattern。请注意,它不是着名的Gang of Four design patterns的一部分,它甚至可以是一种架构模式。

它主要用于通过较小的独立阶段(或过滤器)执行大量数据处理:

此模式用于数据流经一系列任务或阶段的算法。

在以下情况下使用PipelineProcessing模式:问题包括执行一系列计算,每个计算可以在一系列输入上分解为不同的阶段,这样对于每个输入,计算必须按顺序进行,但是有可能如Motivation部分中的图所示,重叠不同输入的不同阶段的计算。

MSDN:

使用此模式时:

  • 应用程序所需的处理可以很容易地分解为一组离散的独立步骤。
  • 应用程序执行的处理步骤具有不同的可伸缩性要求。

enter image description here

enter image description here

通过使用此模式,您可以通过较小的独立(因此更易于管理)步骤执行您的过程,可以并行化其中一些步骤,从而达到更好的性能,甚至可以使用每个步骤(过滤器)的不同实现,并使用失败策略等方法轻松定制它们或验证每个步骤。


0
投票

设计模式是运行良好的模式,但不一定是直观开发的。我认为这个问题属于直观的发展。

这是我将如何攻击它...

在伪代码中

bool DoTheWork(file)
{
  if (!IsUploaded(file))
    return false;
  if (!IsExcel(file))
    return false;
  if (!WriteToDataTable(file))
     return false;
   .... etc
   return true;
}

在嵌套函数中的某些点上可能会出现一些错误,即......

bool WriteToDataTable(file)
{
   try 
   {
     // Details to write to your database
   } 
   catch (e)
   {
     errorLogging(e);
     return false;
   }
   return true;
}
© www.soinside.com 2019 - 2024. All rights reserved.