Wohlstand
@Wohlstand
Инженер-программист С++

Какой способ организации чтения и записи файлов в разных форматах оптимальнее?

Здравствуйте!

У меня есть небольшой вопрос по оптимальности способов организации чтения/записи файлов в разных форматах. Для начала приведу способы, с которыми я имею дело: Есть некоторая программа-редактор. Данные, с которыми она работает, разбиты на разные структуры (их может быть от пяти до тысячи разных).

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

Способ второй - рекурсивный
В отличие от первого способа, все преобразования производятся непосредственно в самих структурах данных, а основные портянки лишь вызывают эти функции у каждой структуры во время перебора. С одной стороны у этого способа есть преимущество в удобстве добавления новых параметров в каждую структуру без необходимости дополнительно залезать в основую портянку чтения/записи. Но в случае поддержки множества разных и несовместимых между собой форматов файлов, нужно будет добавлять дополнительные функции чтения/записи в каждую структуру. Если же стоит задача добавить поддержку нового формата файла при наличии тысячи разных структур, придётся добавлять по функцие чтения/записи в каждую из них. Преимущества подхода актуальны только в случае единственного поддерживаемого формата файла и в случае, что формат используется в небольшом числе программ. Недостаток же в разы меньшая наглядность с "портянкой" и необходимость лазать в другие файлы, что составляет трудность при составлении спецификации формата файла.

Мне интересно мнение остальных на счёт этого.
  • Вопрос задан
  • 233 просмотра
Решения вопроса 1
@MarkusD Куратор тега C++
все время мелю чепуху :)
Мы используем Flatbuffers. :)
Документация присутствует.
Эта штука и версионирование данных поддерживает, при соблюдении некоторых условий.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Mercury13
Программист на «си с крестами» и не только
Портяночный способ хорош, когда на выходе — файл простой структуры. Например, стандартные файлы межпрограммного обмена наподобие HTML, PNG…
Рекурсивный удобнее для внутреннего формата хранения, когда надо в подходящем виде сериализовать всё, что в программе есть, да ещё и наладить поддержку старых версий этой сериализации.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы