Dans WCF, est-il préférable d'avoir des contrats d'exploitation multiples ou d'avoir une seule opération avec contrat de données polymorphes?

StackOverflow https://stackoverflow.com/questions/3006364

Question

Je me demandais si elle était mieux WCF d'utiliser des contrats d'exploitation multiples ou d'avoir un seul contrat d'exploitation avec un contrat de données polymorphes.

Permettez-moi de vous donner un petit exemple:

[OperationContract]
action1Answer action1(action1data a);

[OperationContract]
action2Answer action2(action2data a);

ou

[OperationContract]
actionAnswer action(actionContract a);

Contrat d'action serait une classe abstraite qui à la fois action1Contract et action2Contract vont hériter de. Le contrat d'action préciserait la fonction membre de do() dans son interface qui aurait à son tour, à une surcharge dans les classes enfants

Personellement je trouve la deuxième approche est plus interessant car il vous permet d'encapsuler bien les données et l'action dans le actionContract dérivé et à son tour, facilite l'ajout de nouvelles actions. Mais c'est la première fois que je suis en utilisant WCF donc probablement vous savez mieux!

Était-ce utile?

La solution

Cette question des frontières sur les bords des guerres saintes de polymorphisme OO et SOA, mais je vais donner mes deux cents:

Lorsque vous envisagez de développer une couche de service, il devrait être clair pour le consommateur final du service que de passer et à quoi s'attendre; approche 2 ne gère pas bien. (Aussi, lorsque vous faites SOAP avec WCF et le chargement puis de la wsdl dans d'autres projets .NET, il n'a pas correctement marquer des classes abstraites, ni ne interfaces se transférer. WSDLs ont aucun moyen de décrire une classe de base non instanciable, il semble .)

Bien, je dois admettre que, je pense que le deuxième processus est grande en utilisant les KnownTypeAttributes (comme je vois tout à l'heure marc_s a posté) -. Je l'ai utilisé moi-même lorsqu'on tient compte des besoins futurs inconnus

Autres conseils

Je suis d'accord approche # 2 semble mieux -. Du point de vue de la POO

: SOA / WCF et polymorphisme généralement ne correspondent pas trop bien - SOA (au moins lorsque vous faites des appels à base SOAP) a besoin de classes concrètes qui peuvent être exprimées dans le WSDL / XSD qui définit votre service

.

peut utilisation dérivée des types de données à partir d'un type de base commune - si vous le faites, vous devrez regarder dans le KnownType attribut (ou

scroll top