4

Quelqu'un at-il une stratégie de dénomination qui fonctionne bien pour les classes de proxy de service?Stratégie de nommage des noms de serveurs/noms de proxy Wcf

Par exemple, si je me donne trois services web dans les deux projets comme suit:

XWs 
    AService.asmx 
YWs 
    BService.svc 
    CService.svc 

Que utiliserait le Service de référence Nom & pour AService Namespace, BService et CService? En général, je voudrais que quelque chose dans le nom/l'espace de noms du proxy indique que la chose utilisée n'est pas une classe concrète, mais représente un proxy - les deux ne sont donc pas incompatibles avec l'utilisation de classes concrètes. d'aliasing ou de noms de classes qualifiés pour l'espace de noms], et donc nous ne cachons pas le fait qu'il y ait un saut (je suppose que le suffixe par défaut du client du Service Wcf Service couvre cela). Il est également important de traiter les cas dans lesquels on écrit un service wrapper/shim qui transmet un [sous] ensemble d'appels à un autre service référencé.

Je l'ai utilisé divers styles (Ajout Ws, ServiceProxy, Ref ou Proxy suffixes? Préfixer avec ServiceName.), mais ont jamais été pleinement heureux avec eux.

Qu'est-ce qui a bien fonctionné pour vous? Tous les guides de style font référence à un style de nommage?

Edit: Alors que la réponse de Cheeso couvre la majeure partie de ma question, je suis toujours intéressé par les réponses entendre sur:

  1. Une stratégie pour des espaces de noms des classes proxy comme dans l'exemple ci-dessus
  2. Un guide de style mentionne une stratégie de nommage pour les serveurs proxy

Répondre

2

J'utilisé à l'origine des noms comme NomService Proxy et ServiceName SvcProxy. Mais, comme vous, je n'ai pas été particulièrement satisfait de ces noms, et par conséquent je ne me suis pas tenu à eux. Maintenant, je viens de recourir à ServiceName Service ou ServiceName Svc.

Est-ce que la clé que vous voulez communiquer aux utilisateurs de la classe est la classe est un proxy? La distinction que vous faites - entre une classe proxy et une classe concrète - semble s'appliquer et alligators. Le contraire du concret est abstrait, non? Et la classe proxy générée par svcutil.exe est, en fait, concrète. Avec une convention de dénomination, je pense que vous essayez d'indiquer que la classe proxy communique avec un service distant. (Lorsque nous l'appelons un "proxy", nous voulons dire qu'il se trouve en face de quelque chose, dans ce cas le service distant.) Si tel est le cas, pourquoi pas ServiceName Service ou ServiceName Connexion, ou le long lignes similaires? Comme System.Data.OleDb.OleDbConnection ou System.Data.SqlClient.SqlConnection.

Ma propre convention de nommage est en accord avec cela. Il indique que la classe représente un service supposé distant. Je ne me soucie pas tellement d'accentuer le fait que c'est un proxy-to-a-service. Pour des raisons pratiques, le fait qu'il s'agisse d'un service est la clé.

+0

Salut Cheeso, Merci d'avoir pris le temps de répondre. Je me suis distrait immédiatement après avoir posté la question d'où l'attente folle ... Je suppose que le suffixe svcutil 'Client' n'est pas la fin du monde pour le nom de la classe proxy. La question de l'espace de noms à ajouter (surtout si vous utilisez deux points de terminaison sur la même application (YWs ci-dessus) reste sans réponse, mais vous aimeriez aussi la voir dans un guide de style aussi ... Quoi qu'il en soit, merci! –

1

J'explore aussi les options ici. Je viens de lire this article par Miguel Castro et il recommande de séparer le service, l'hôte de service, le contrat de données et le contrat de service et j'essaie principalement de décider si je dois conserver tous mes contrats de service dans un espace de nom de contrat séparé espace de noms de service. Raison de les séparer dans leur propre espace de noms est que si d'autres services les utilisent, ils sont dans un endroit plus neutre.

Ainsi, par exemple ceci:

companyname.services.contracts.service1contract 
companyname.services.service1 

ou ceci:

companyname.services.service1 
companyname.services.service1contract 
+0

Je ne descendrais pas la route 'companyname.services.contracts' - rappelez-vous que tout service approprié devrait être complètement autonome Avoir un espace central de 'contrats' est comme avoir un projet utils - tout le monde s'empile et vous vous retrouvez avec 40% –

+0

Pour aller encore plus loin - le bit companyname est discutable - que se passe-t-il si vous fusionnez? Si vous rachetez une autre société ou la vôtre, est-il essentiel que la moitié de vos services après la fusion se trouvent dans un autre arbre de nommage? companyname.services 'to gi vous avez une chance de ne jamais être en conflit avec les autres assemblées que vous touchez. Souvenez-vous cependant que le véritable espace de noms est l'espace de noms WSDL * dans * votre contrat. –

+0

Ma question était définitivement du côté des clients, et c'est ce que je vois sur l'article de Miguel à partir d'un balayage rapide. Donc, pour résumer, je choisirais un 'FamilyRootIfService1IsPartOfAFamilyOfServicesButNotJustACompanyNameIfItCanBeAvoided.Service1.Contracts'. Si vous souhaitez placer vos contrats pour chaque service dans un espace de noms et un projet, j'utiliserais 'Root.Service1.Contracts' (plutôt que Service1Contracts) pour que la relation entre' Service1.Contracts' et 'Service1' soit claire Et appelez votre assembly, .csproj et le répertoire de projet exactement le même que l'espace de noms: 'R.S1.Contracts' –

Questions connexes