2009-05-19 3 views
2

J'essaie de penser à la conception correcte pour un service Web. Essentiellement, ce service va effectuer une recherche de client dans un certain nombre de systèmes disparates, et retourner les résultats.Service Web pour renvoyer un objet complexe avec des pièces optionnelles

Maintenant, un client peut avoir diverses informations jointes - par ex. divers éléments d'information de contact, leur adresse (s), informations personnelles. Certaines de ces informations peuvent être complexes à extraire de certains systèmes, donc si le consommateur ne va pas l'utiliser, j'aimerais qu'il ait un moyen de l'indiquer au service Web.

Une approche évidente serait d'avoir différentes méthodes pour différentes combinaisons de détails recherchés - mais au fur et à mesure que les combinaisons grandissent, le nombre de méthodes augmente également. Une autre approche que j'ai regardée est d'ajouter deux paramètres de tableau de chaînes à l'appel de méthode, où un tableau est une liste d'éléments requis (par exemple, j'ai besoin d'informations de contact), et l'autre est facultatif (par exemple tirez dans leurs noms de toute façon, vous pourriez aussi bien me rendre cela).

Une troisième approche consisterait à ajouter des méthodes supplémentaires pour extraire le détail. Mais cela va exploser le nombre d'allers-retours si j'ai besoin de tous les détails pour potentiellement des centaines de clients qui composent le résultat.

Pour être honnête, je ne suis pas sûr que j'aime l'une des approches ci-dessus. Alors, comment concevez-vous un tel service générique de recherche de clients?

(CW Considérée comme il pourrait ne pas être un « droit » réponse, mais je vais attendre et voir quel genre de réponses arrivent)

Répondre

3

Créer un objet « criteria » et l'utiliser comme un paramètre. Un tel objet devrait avoir un tas de propriétés pour indiquer l'information que vous voulez. Par exemple "IncludeAddresses" ou "IncludeFullContactInformation".

Le consommateur est alors responsable de définir les bonnes propriétés à true, et toutes les combinaisons sont possibles. Cela rendra également le code dans le service plus facile à faire. Vous pouvez simplement écrire if(criteria.IncludeAddresses){response.Addresses = GetAddresses;}

1

Toute donnée non structurée ou semi-structurée est mieux gérée par XML. Vous pouvez transmettre des données XML via une chaîne ou envelopper dans une classe en y ajoutant des fonctionnalités. Utilisez XPathNavigator pour parcourir XML. Vous pouvez également utiliser la classe XMLDocument bien qu'elle ne soit pas trop conviviale. Quoi qu'il en soit, vous aurez besoin d'une sorte de classe pour gérer le contenu XML bien sûr.

C'est pourquoi XML a été inventé - pour gérer des données dont la structure n'est pas clairement définie.

Cordialement, Maciej

Questions connexes