.Net数据阅读器的设计模式

时间:2011-03-08 07:58:57

标签: .net design-patterns

您认为"理想"用于将某种文件类型读入我的应用程序的设计模式。

我希望能够在不同的地方重用代码,所以很明显我想在一个单独的dll中使用它,但是虽然我没有问题将文件名或流传递到代码中,但推荐的是什么用于处理读取数据的设计模式。

从内存管理的角度来看,将所有数据读入数组并将其传递出去显然并不理想,但我能想到的另一种方法是在读取记录时引发事件,但这并不是感觉"对"因为我担心某些事件会误入歧途。

我确信这样做有一种非常光滑的方式,但我无法想到这一点。

由于

2 个答案:

答案 0 :(得分:1)

格式是什么?如果是文本,传入TextReader将是理想的;对于xml,XmlReader。如果它是任意二进制文件,则传入Stream

对于大数据,理想的方法尽可能是以非缓冲方式读取数据 - 即不要将其全部加载到内存中。迭代器块在这里很有用,例如这里有一个显示读取线的愚蠢示例(但它可以很容易地从流中的数据构建yield return个对象):

    public IEnumerable<string> ReadLines(TextReader source)
    {
        string s;
        while ((s = source.ReadLine()) != null)
            yield return s;
    }

显然在一般情况下,每个项目可能需要更多处理!

调用者现在有一个懒惰的假脱机,非缓冲的数据源,例如:

using(var file = File.OpenRead(path))
{
    foreach(var customer in YourSpiffyParser(file))
        DoSomethingFun(customer);
}

处理流/文本阅读器等允许他们在装饰链中使用它而不是文件;网络流,内存流,压缩/加密流等

答案 1 :(得分:0)

很难定义如此普遍的东西。您必须指定更多您真正需要的内容或文件类型。然后你可以看一下.NET Framework本身,有很多“XXXReader”类,例如:

  • BinaryReader在
  • 的TextReader
  • 的StreamReader
  • StringReader
  • 的XmlReader
  • XmlTextReader的
  • 的IDataReader
  • EventLogReader
  • XamlReader
  • EntityDataReader

每一个都与其他人完全不同......有些是抽象的,有些则不是,等等......