Шаблон проектирования для чтения данных .Net - PullRequest
1 голос
/ 08 марта 2011

Как вы думаете, «идеальный» шаблон проектирования для чтения файлов определенного типа в моем приложении.

Я хочу иметь возможность многократно использовать код в разных местах, поэтому ясно, что я хочу иметь его вОтдельная DLL, однако, хотя у меня нет проблем с передачей имени файла или потока в код, каков рекомендуемый шаблон проектирования для обработки прочитанных данных.

Считывание всех данных в массив и их передача, очевидно, не являетсяидеал с точки зрения управления памятью, но я могу думать только о том, чтобы делать это, вызывая события при чтении записи, однако это не кажется «правильным», так как я был бы обеспокоен тем, что некоторые событияможет сбиться с пути.

Я уверен, что есть действительно отличный способ сделать это, но я не могу на всю жизнь думать об этом.

Спасибо

Ответы [ 2 ]

1 голос
/ 08 марта 2011

Какой формат? Если это текст, передача в 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);
}

А обработка потока / читателя текста и т. Д. Позволяет им использовать его в цепочке декораторов с другими вещами, кроме файлов; сетевые потоки, потоки в памяти, сжатие / криптопотоки и т. д.

0 голосов
/ 08 марта 2011

Трудно определить что-то столь общее.Вам нужно будет указать больше того, что вам действительно нужно, или тип файла.Затем вы можете взглянуть на саму .NET Framework, есть много классов «XXXReader», например:

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

И каждый действительно отличается от других ... Некоторые абстрактны, некоторые нет, и т.д ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...