我试图将SProc的结果写入文本文件。我有3个场景:
SProc没有参数。
SProc接受参数。
SProc接受参数,并且有一个循环可以增加参数。
方案1和2的数据将存储在列表中,因为它们最有可能只是一行结果。
方案3的数据将存储在数据表中。
我正在考虑使用工厂模式,3个不同的类,每个类实现一个特定的接口,以及一个工厂来确定需要哪3个。
问题是一旦方法完成并且完成事件已经上升,我需要知道实现了什么场景(datatable vs List)这是一个问题吗?如果是这样,有人可以解释为什么+一个可能的解决方案?
注意:只是为了澄清,这不是请求,请写下我的程序。
非常感谢你的时间,我很感激。
答案 0 :(得分:2)
每当您需要知道接口背后的实际类型时,您可能选择了一个错误的点来介绍接口。这就是这里的样子。
在我看来,您希望将逻辑(产生一些数据)的关注与记录结果的逻辑(在本例中为文本文件,但可能还有其他目标,对吗?)分开。 。为什么不为ResultLogging引入一个接口?
interface IResultLogger
{
void LogList(List<Something> data);
void LogDataTable(DataTable data);
}
并将此接口的实例传递给所有执行逻辑的方法?
如果您不希望在这些方法中使用“logging”(调用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);
}