#oop #storing-data
#ооп #хранение-данные
Вопрос:
Допустим, я пишу автономное настольное приложение. Скажем, он объектно-ориентированный, и ему необходимо сохранить свои данные в файл. Данные обычно хранятся в разных классах. Задействовано наследование.
SQLite кажется распространенным выбором, но его поддержка наследования несколько слабовата, и для ее реализации требуется прибегать к различным уловкам, поэтому я думаю, есть ли лучшие, более гибкие варианты?
(предположим, что создание моего собственного формата данных не является вариантом)
РЕДАКТИРОВАТЬ: В частности, в настоящее время я работаю с Windows и C #, хотя в будущем меня также будут интересовать решения на C .
Комментарии:
1. Вы не указали целевую ОС и язык программирования… Возможные решения для macOS, Linux или Windows и Visual C против Delphi будут совершенно разными. Пожалуйста, пересмотрите свой вопрос, чтобы он был более конкретным.
Ответ №1:
Возможно, нет причин использовать реляционную базу данных для хранения данных. Инструменты реляционного отображения OO-RDB многочисленны, но добавляют больше сложности и точек отказа приложению. C # / .Net предоставляет приятный интерфейс сериализации (http://goo.gl/zmyeo ). Использование .При сериализации Net объекты могут быть записаны в файл либо в формате XML, либо в двоичном формате. Затем XML- или двоичный файл может быть «десериализован» обратно в объекты. Как правило, это быстро и удобно, и обычно достаточно для прототипа.
Некоторые преимущества реляционных баз данных заключаются в том, что они поддерживают SQL (упрощая использование данных другими приложениями) и поддерживают доступ многих пользователей к одному и тому же набору данных. Как только приложение заработает или перерастет функциональность, предлагаемую сериализацией, рассмотрите возможность переноса его в реляционную базу данных, такую как SQLite.
Проблема с C немного сложнее. C не предлагает никакой готовой сериализации. Отсутствие отражения затрудняет написание и поддержку кода сохранения объектов. Моя собственная стратегия заключается в том, чтобы по возможности избегать C для OO-приложений. Если C является обязательным, взгляните на некоторые из инструментов сопоставления OO-RBD для C : http://goo.gl/7ytOV .
PS: По мере развития приложения имена классов и атрибутов изменяются, добавляются и удаляются. Обратное чтение в сериализованных объектах из более старой базы кода создает проблемы — содержимое файла не соответствует структуре (обновленных) классов. C # предоставляет средство, позволяющее переносить старые объекты в новые объекты. Если вы идете по пути сериализации, проверьте это.