Existe uma maneira mais limpa e é usar estruturas de dados imutáveis / persistentes. Esta é uma ideia da programação funcional, mas não há realmente nenhuma razão para que você não possa fazê-lo em um paradigma orientado a objetos também.
Você constrói os dados de maneira que nunca sejam excluídos ou transformados. Atualizações criam uma nova estrutura sem alterar os dados da estrutura antiga. Se uma atualização der errado, você reverte para a versão anterior. Se for bem sucedido, você pode descartar a versão anterior, dependendo de suas necessidades.