J'ai construit un mécanisme de requête complexe pour lequel je veux fournir une usine afin d'aider les gens avec des modèles de requête communs. Mes méthodes sont toutes révélées via WCF en tant que service web SOAP. Quelle est la meilleure façon de s'assurer que mon usine est facile à utiliser pour tous les clients qui souhaitent utiliser mon service (car je ne m'attends pas à ce que tous mes clients utilisent .net)? Mise à jour: Je veux écrire quelques méthodes d'usine pour aider avec des modèles communs contre un "système de requête" que j'ai écrit. J'ai actuellement plusieurs OperationContracts exposés à partir de mon Service et plusieurs DataContracts exposés. J'ai un blocage mental quant à la meilleure façon de construire quelque chose d'une Usine pour renvoyer mes objets de requête personnalisés pour supporter les modèles communs que je suppose qu'ils désirent. Un exemple concret de ceci est qu'une méthode renvoie des hits sur ma base de données basée sur un objet de requête de recherche qui a plusieurs groupes de concepts de correspondance multiples, mon code traduit tout cela en arbres d'expression LINQ, un groupe commun dans cette L'objet de requête de recherche consisterait à limiter les résultats aux seules sources d'origine américaine, qui sont en fait un groupe d'environ 20 correspondances et qui peuvent changer, donc au lieu d'afficher un exemple de code codé en dur, je préfère simplement retourner l'objet groupe en fonction des données sur l'origine des articles qu'ils peuvent ensuite utiliser dans leur objet de requête de recherche. Cela semble idéal pour une méthode d'usine comme "GroupFactory.CreateGroupOfSomethingOrOther", mais quel est le meilleur endroit pour moi de le faire? Ou suis-je en train de rendre cela beaucoup plus compliqué dans mon esprit qu'il ne devrait l'être?Quelle est la meilleure façon de créer une méthode d'usine lors de l'utilisation de WCF?
2
A
Répondre
1
Vous ne pouvez pas vraiment fournir d'usines à moins de fournir des bibliothèques pour chacun de vos consommateurs dans leur langue maternelle. Au lieu d'une fabrique qui renvoie un objet de regroupement, envisagez d'ajouter un filtre à certains objets filtrants nécessitant une configuration moins granulaire.
Par exemple, au lieu de:
GetMatches(new GetMatchRequest() {
Filter = new FilterByState() {
"AZ", "CA", "OH", ... }});
Tenir compte:
GetMatches(new GetMatchRequest() { Filter = new FilterByCountry("USA") });
Lorsque tous les filtres communs dérivent de quelque chose comme FilterBase
ou mettre en œuvre IFilter
. Sur le serveur, appelez quelque chose comme FilterBase.ConstructQueryObject()
pour renvoyer les objets plus granulaires.