Le fichier java.io.Serializable est relativement facile à sérialiser. Il ne valide que contre serialVersionUID et ne vous permet pas de charger des versions plus anciennes/plus récentes de vos objets. Cela signifie que vous rendez invalide vos données sauvegardées avec des modifications significatives à vos objets.
Une autre approche consiste à enregistrer vos objets sous forme XML. Mais une telle implémentation peut devenir difficile car vous devez gérer des références de cercle. Vous pourriez mettre en œuvre quelque chose comme ce qui suit pour toutes les classes que vous souhaitez enregistrer:
public Element asXmlElement(Document doc) {
Element element = doc.createElement(this.getClass().getSimpleName());
element.setAttribute("class", this.getClass().getName());
element.setAttribute("id", this.getId().toString());
elements.put(this.getId(), element);
// add more properties here... either as child nodes or attributes!
// i.e. element.appendChild(referencedObj.asXmlElement(doc));
return element;
}
appel à cette méthode récursivement sur votre objet graphique peut éventuellement finir dans une boucle sans fin. Vous devez gérer cela (c'est-à-dire en gérant une liste de référence d'objets déjà gérés et en incorporant des éléments refID dans la structure XML).
En ajoutant un attribut de version à vos nœuds XML, vous pouvez gérer le chargement de différentes versions de vos données d'objet. Vous devez implémenter une sorte de classe exportateur/importateur capable d'utiliser ces méthodes. Bien sûr, vous avez besoin de la méthode opposée à asXmlElement ... quelque chose comme fromXmlNode (noeud Node) qui décode les données dans l'objet.
Ceci est seulement une approche possible.
"pas bon" dépend de l'exigence fonctionnelle. Dans certaines circonstances, c'est un choix parfait, dans d'autres circonstances c'est un mauvais choix. Si vous développez plus sur l'exigence fonctionnelle, alors nous pouvons donner des réponses mieux adaptées sur la «bonne» approche. – BalusC
Exigences fonctionnelles: Capable de sauvegarder un objet et de le charger (pas nécessairement enregistrer l'objet, mais éventuellement sauvegarder les champs de l'objet et le charger dans un nouvel objet). Fiabilité primaire, performance secondaire – joseph