Есть альтернативы этим вариантам. Один из них - покончить с хранилищем, и пусть модель определит поведение:
public interface Order {
void cancel();
}
, а затем реализует поведение с помощью определенной технологии:
public final class SqlOrder implements Order {
...
@Override
public void cancel() {
connection.execute("update order...");
}
}
В зависимости в ваших сценариях использования это может привести к следующим преимуществам: не является анемичным, избавляется от потенциально ненужной косвенности (хранилища), использует язык домена, а не технические аспекты CRUD, более удобен в обслуживании, легко тестируется, потому что заказ теперь просто интерфейс и т. д .
Да, Вы хотели бы сериализировать данные к некоторому формату - xml, двоичный файл, безотносительно. В зависимости от программирования languagem это может быть встроен для Вас. Java имеет ObjectStreams.NET имеет XmlSerializer и также BinaryFormatter.
Вы могли бы хотеть попробовать объектный механизм распространенности. Для.NET Вы могли бы хотеть попробовать Бамбук. Распространенность, которая является портом подобного механизма под названием Prevayler для Java.
Любой ответ на Ваш вопрос повлечет за собой выполнение чего-то как то, что делает система баз данных ACID. Таким образом, я сказал бы, что Ваш лучший выбор состоит в том, чтобы использовать RDBMS для хранения состояния приложения, обновляя каждый раз, когда у Вас есть (приложение) транзакция, которая не должна быть потеряна.
Вы могли придумать некоторый способ сериализировать Вашу структуру, ли с XML, YAML, JSON, и т.д. Затем Вы могли или сохранить это в DB или возможно поместить одну большую попытку/выгоду вокруг основной точки выполнения к программе. Затем, если некоторое неперехваченное исключение происходит, который заставит программу отказывать, Вы могли сериализировать свои данные, ответ хорошо как журнал любые сообщения об ошибках, отслеживания стека, и т.д.