2009-12-04 2 views
3

Je construis une API REST qui expose des données au format XML. J'ai tout un tas de classes de domaine dans ma couche de domaine qui sont destinées à être consommées à la fois par la couche de service derrière l'API et par l'API client que nous fournirons aux clients. (Les clients ont la possibilité d'interagir directement avec l'API REST, mais l'API client simplifie les choses). Je veux garder mes classes de domaine propres de toute logique de persistance des données, mais je m'efforce de comprendre si c'est bon pour les classes de domaine d'implémenter IXmlSerializable pour simplifier le processus de sérialisation des données exposées et récupérées l'API J'ai commencé par penser que je garderais les classes de domaine libres de toute logique de sérialisation et les décortiquerais plutôt avec des comportements de sérialisation, par ex. Enveloppez l'objet domaine à l'intérieur d'un objet qui gère la sérialisation. Est-ce que je rends les choses plus compliquées qu'elles ne le devraient? Des pensées sur comment je devrais aborder cela? Merci!Les objets de domaine doivent-ils implémenter IXmlSerializable?

Répondre

5

Les classes de domaine doivent uniquement concerner la logique métier, pas la persistance ou la sérialisation.

Vous devez créer un ensemble de classes DTO (Data Transfer Object), chacune correspondant à l'une des classes de domaine. Ces classes ne contiendraient que les propriétés, à partir des classes de domaine, que vous avez décidé d'exposer. Cela permet aux classes de domaine d'avoir des propriétés qui ne sont pas exposées via vos couches de persistance ou de sérialisation. Seuls les objets DTO seraient sérialisés et désérialisés.

Vous pouvez alors trouver pratique de créer des méthodes de traduction statique pour traduire entre le domaine et les objets DTO.

+0

À quoi ressemblerait votre couche de sérialisation? Auriez-vous des méthodes qui acceptent les DTO et les affichent en XML? Ou voulez-vous prendre un flux et sérialiser? – csano

+0

Cela dépend de ce dont j'ai besoin. J'ai tendance à suivre le modèle de nombreuses API basées sur XML dans .NET, et accepte un 'XmlWriter' comme destination. Si je trouve que le code appelant crée à plusieurs reprises le 'XmlWriter' d'un flux, j'ajouterais une surcharge qui prend un flux. Si j'ai trouvé le code appelant en utilisant 'XPathNavigator.AppendChild' pour créer le' XmlWriter', alors j'écrirais une surcharge qui accepte 'IXmlNavigable', etc. –

+0

Merci, John, je l'apprécie. – csano

Questions connexes