设计模式处理瀑布处理

时间:2016-12-16 17:24:14

标签: c# excel oop design-patterns

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

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

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

步骤将是:

  1. 上传文件 - 验证文件是否已上传,如果没有,请返回。
  2. 验证该文件是否为Excel文件,如果没有,请返回。
  3. 将文件读入数据表,如果错误,则返回。
  4. 从数据库中获取datatabe,如果错误,则返回。
  5. 将每个数据表加载到相应的2D数组中,如果错误,则返回。
  6. 比较每个数组是否具有相同的列数,如果错误,则返回。 等等等......
  7. 有没有办法为此使用设计模式?感谢。

2 个答案:

答案 0 :(得分:1)

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

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

  

此模式用于数据流经a的算法   任务或阶段的顺序。

     

时使用PipelineProcessing模式:   问题包括   执行一系列计算,每个计算都可以被打破   在一系列输入上分成不同的阶段,这样每个阶段   输入计算必须按顺序完成,但有可能   不同输入的不同阶段的重叠计算为   在动机部分的数字中指出。

MSDN:

  

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

enter image description here

enter image description here

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

答案 1 :(得分: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;
}