Лучший способ представить текст в памяти - PullRequest
0 голосов
/ 17 ноября 2010

У меня есть 2 класса, которые наследуются от общего базового класса.

Каждый из этих специализированных классов загружает некоторые данные из базы данных, обрабатывает их и затем сохраняет эту информацию в текстовых файлах.

Первый класс представляет информацию в виде документа XML.Второй класс будет хранить свою информацию в виде текстового файла с разделителями, разделяющими поля.

Я хочу написать единственный метод Save в базовом классе, который может использоваться обоими классами.Поскольку все классы будут писать в текстовые файлы, я думал использовать общее представление для хранения своих данных в памяти - например, первый класс преобразует XmlDocument в это общее представление.это в памяти, строка, поток?

Спасибо

Ответы [ 3 ]

1 голос
/ 17 ноября 2010

Учитывая, что XML является более богатым из двух упомянутых вами форматов и относительно прост в управлении, почему бы не иметь одно представление и 2 метода сохранения?

1 голос
/ 17 ноября 2010

Если производные классы представляют данные очень по-разному, не реализуйте для них общий метод Save, эти классы лучше всего знают, как сохранить свои данные.Сделайте Save () абстрактным и пусть каждый из подклассов реализует сохранение.

Для выполнения Save () может быть что-то общее (например, открытие реального файла, обработка ошибок).Поэтому пусть ваш базовый класс предоставляет метод Save (), который отвечает за то, что в свою очередь вызывает виртуальный Save(System.IO.TextWriter writer); метод, который реализует каждый из ваших подклассов.

0 голосов
/ 17 ноября 2010

Если входные данные имеют однородную структуру, вы, вероятно, можете хранить их чисто в DataSet и, возможно, загружать непосредственно из вашего XML, используя DataSet.ReadXml для TextReader ввода.

Если у вас есть только один тип записи для вывода в текстовый файл с разделителями, DataTable может использоваться напрямую - DataSet инкапсулирует несколько DataTable с.

Другой альтернативой может быть преобразование XML непосредственно в CSV (здесь запятая = разделитель, вы можете использовать все, что захотите) с использованием XSLT, как показано здесь @ Welbog.

...