2009-04-03 12 views
3

J'essaie de sérialiser mes objets métier en JSON pour les consommer via une application Javascript. Le problème est que j'essaie de garder mes objets métier "purs" dans le sens où ils ne sont pas conscients de l'accès ou de la persistance des données. Il me semble que "diluer" mes objets avec une fonction toJSON() irait à l'encontre de cet objectif. D'un autre côté, l'utilisation d'un objet externe pour sérialiser mes objets métier ne fonctionnerait pas puisque je garde toutes mes variables d'instance privées. Est-ce que je m'approche complètement de ce mauvais sens?Sérialisation d'objets métier au format JSON

Répondre

6

Si les variables d'instance sont privées, elles ne doivent pas apparaître dans une sérialisation qui est envoyée à une application JavaScript. Par définition, si vous les sérialisez et que vous les envoyez à une application distincte, ils sont publics. Ainsi, un objet externe devrait avoir un moyen d'y accéder, probablement à travers une sorte de méthodes getter.

1

À quoi sert la searialisation des données dans JSON? Est-ce purement pour le reporting? Si oui, alors Brian a raison, ces variables devraient avoir des méthodes getter. Si le but de la sérialisation est de transporter les données vers une application JavaScript où elles peuvent être manipulées puis renvoyées à l'application d'origine, il est peut-être préférable de créer une classe associée servant à la sérialisation pendant que toujours en conservant une forte encapsulation.

Par exemple, en Java, vous pouvez définir une classe interne. Une instance de classe interne a un accès direct à tous les champs de l'instance de classe englobante sans avoir besoin de méthodes getter. Ou vous pouvez grouper avec un paquet (ou espace de noms) en utilisant les modificateurs d'accès corrects pour permettre l'accès par le sérialiseur, mais pas par n'importe quelle autre classe.

Ou vous pourriez utiliser la réflexion. Ou détourner la méthode toString. (Ou brillez le tout et créez une méthode toJson.)

0

Envisagez-vous de générer du code JSON à partir d'un code non-javascript (comme Java côté serveur)? La réponse dépend de cela: la gestion de JSON est très différente sur Javascript et, disons, sur Java. Il y a déjà une réponse par rapport à javascript, ce qui semble correct.

Si c'est sur Java, il y a des bibliothèques qui peuvent aider; par exemple (Jackson) peut désérialiser n'importe quel bean, en utilisant l'introspection de méthode getX/setX régulière; plus des annotations supplémentaires (et facultatives).

Questions connexes