Как спроектировать набор файловых ридеров и писателей для разных форматов - PullRequest
4 голосов
/ 27 мая 2011

Копаясь в устаревшем проекте (C ++), который нужно расширить, я понял, что существует около 40 классов чтения / записи / синтаксического анализа. Они используются для чтения и записи данных различного типа (разных объектов) в разных форматах файлов (двоичные, hdf5, xml, текстовые, ...); один тип объекта обычно привязан к одному или двум форматам файлов. Классы для большинства из них просто не знают других. Интерфейс и наследование были, по-видимому, неизвестны писателю, а также шаблоны проектирования.

Мне кажется, это ужасный беспорядок. С другой стороны, я не совсем уверен, как справиться с этой ситуацией. По крайней мере, я буду извлекать интерфейсы. Я также хотел бы видеть, могу ли я иметь общий код в некоторых родительских классах, например, что специфично для читателя / писателя hdf5. Я также подумал, что абстрактный шаблон фабрики может помочь, но объект, который я получаю от читателей, совершенно другой.

Как бы вы справились с этой ситуацией? Как бы вы разработали классы? какой шаблон дизайна вы бы использовали, если таковые имеются? Вы бы разделили части для чтения и письма?

1 Ответ

5 голосов
/ 07 июля 2011

Шаблон Абстрактной Фабрики не верный путь. Обычно вам нужны интерфейсы, только если вы ожидаете несколько реализаций для данного типа файла и хотите, чтобы оба работали одинаково.

Вопрос: можно ли записать один класс в несколько типов файлов? Как, например, объект 'a' (типа Класс A) потенциально должен быть записан в / или оба XML или текстовые форматы?

Если это правда, вам нужно отделить классы от читателей / писателей. Взгляните на этот вопрос: Какой шаблон дизайна я должен использовать для импорта / экспорта?

...