0

我试图将结果从 SProc 写入文本文件。我有3个场景:

  1. SProc 没有参数。

  2. SProc 接受参数。

  3. SProc 接受参数,并且有一个循环增加参数。

场景 1 和 2 的数据将存储在一个列表中,因为它们很可能只是单行结果。

场景 3 的数据将存储在数据表中。

我正在考虑为此使用工厂模式,3 个不同的类,每个类实现一个特定的接口,以及一个工厂来确定需要 3 个中的哪一个。

问题是一旦方法完成并且完成事件已经上升,我需要知道实现了什么场景(数据表与列表)这是一个问题吗?如果是这样,有人可以解释为什么+可能的解决方案吗?

注意:只是为了澄清,这不是请求,请编写我的程序。

非常感谢您的时间,我很感激。

4

1 回答 1

2

每当您需要知道接口背后的实际类型时,您可能选择了错误的点来介绍接口。这就是这里的样子。

在我看来,您想将执行逻辑(产生一些数据)的关注与记录结果的逻辑(在本例中为文本文件,但可能还有其他目标,对吗?)分开。为什么不为 ResultLogging 引入一个接口呢?

interface IResultLogger
{
   void LogList(List<Something> data);
   void LogDataTable(DataTable data);
}

并将此接口的实例传递给执行逻辑的所有方法?

如果您不想在这些方法中包含“日志记录”(调用 IResultLogger 接口),您可以添加另一个抽象:“ResultData”的概念。

abstract class ResultData
{
   abstract public void LogToResultLogger();
   //add methods to access the data in a way you might need for other things in your program
}

并派生一个“ListResultData”和“DataTableResultData”。

我在这里看不到工厂模式的价值。

另一种方法是拥有一个

class ListLogger
{
   public void LogList(List<Something> data) {}
}

class DataTableLogger
{
   public void LogDataTable(DataTable data) {}
}

void method1() and method2()
{
  //do logic
  new ListLogger().LogList(data);
}

void method3()
{
  //do logic
  new DataTableLogger().LogDataTable(data);
}
于 2012-06-29T08:08:07.430 回答