Какой способ организации чтения и записи файлов в разных форматах оптимальнее?
Здравствуйте!
У меня есть небольшой вопрос по оптимальности способов организации чтения/записи файлов в разных форматах. Для начала приведу способы, с которыми я имею дело: Есть некоторая программа-редактор. Данные, с которыми она работает, разбиты на разные структуры (их может быть от пяти до тысячи разных).
Способ первый - портяночный
Все преобразования данных производятся непосредственно внутри функций чтения/записи (массивы структур пербираются напрямую и внутренние значения преобразуются в целевой формат. Сами структуры при этом никаких дополнительных функций преобразования не имеют). В итоге получаются функции "портянки". Мой колега считает, что этот способ "не масштабируемый", предпочитая второй способ. Я же считаю, что этот способ имеет преимущество в удобстве добавления поддержки новых форматов простым написанием аналогичной "портянки" под новый формат. Также основное преимущество этого метода - наглядность процесса чтения/записи файла в указанном формате и очень легко составить подробную спецификацию формата файла, ориентируясь только по одной основной портянке.
Способ второй - рекурсивный
В отличие от первого способа, все преобразования производятся непосредственно в самих структурах данных, а основные портянки лишь вызывают эти функции у каждой структуры во время перебора. С одной стороны у этого способа есть преимущество в удобстве добавления новых параметров в каждую структуру без необходимости дополнительно залезать в основую портянку чтения/записи. Но в случае поддержки множества разных и несовместимых между собой форматов файлов, нужно будет добавлять дополнительные функции чтения/записи в каждую структуру. Если же стоит задача добавить поддержку нового формата файла при наличии тысячи разных структур, придётся добавлять по функцие чтения/записи в каждую из них. Преимущества подхода актуальны только в случае единственного поддерживаемого формата файла и в случае, что формат используется в небольшом числе программ. Недостаток же в разы меньшая наглядность с "портянкой" и необходимость лазать в другие файлы, что составляет трудность при составлении спецификации формата файла.
Mercury13 , а тут, понимаешь, какой вопрос, такой и ответ... Размыто всё, конкретики никакой. Структуры бывают разные, программы бывают свои и чужие, форматы - текстовые, бинарные и не только.
Это просто всё, что мне пришло в голову при чтении вопроса. :)
Форматы файлов для меня далеко не пустой звук. Подсказать могу многое. Главное - это правильно задать вопрос...
Ну и мне совершенно не важно, насколько мой ответ решает вопрос в его описании. Мне важно просто поделиться имеющейся информацией и, возможно, подтолкнуть человека к дальнейшей прагматике по вопросу.
Портяночный способ хорош, когда на выходе — файл простой структуры. Например, стандартные файлы межпрограммного обмена наподобие HTML, PNG…
Рекурсивный удобнее для внутреннего формата хранения, когда надо в подходящем виде сериализовать всё, что в программе есть, да ещё и наладить поддержку старых версий этой сериализации.