2011-04-19 7 views
4

J'ai un service de données WCF qui expose ma base de données sur HTTP.se débarrasser du couplage serré du service de données wcf

Je me suis rendu compte qu'à l'avenir, si ma base de données change, les clients devront également être mis à jour, ce qui signifie que j'ai étroitement couplé ma base de données avec les clients. Comment puis-je conserver les avantages du service de données WCF (il peut facilement exposer des données sur http sans trop d'effort) tout en ayant un faible couplage?

Répondre

0

Si vous utilisez Entity Framework pour exposer votre base de données grâce à WCF Data Services, que l'EF est votre niveau d'indirection. Il vous permet de modifier votre schéma de base de données tout en conservant le même modèle (ce que les services de données WCF exposent).

+0

vraiment? pouvez-vous changer votre DB et conserver les mêmes objets EF? – Attilah

+0

Oui - je ne suis pas un expert EF, donc je ne sais pas combien vous pouvez changer la base de données et toujours garder le même modèle, mais vous pouvez certainement faire des choses simples comme: renommer (table, colonne, ...), ajoutez des colonnes dans la base de données qui ne sont pas visibles dans le modèle, et ainsi de suite. Beaucoup d'autres choses peuvent être faites à travers des vues dans la couche DB et en utilisant EF au-dessus de ces vues. –

1

Je n'ai jamais utilisé WCF, donc cette réponse peut ne pas s'appliquer à cette technologie. Mais ne pouvez-vous pas encapsuler toute la logique DB dans une méthode ou une classe avec laquelle vos clients interagissent? Vous pouvez ensuite modifier la logique dans le cas d'une nouvelle base de données, au sein de la méthode/classe et tant que le contrat public est le même, vous ne devriez pas avoir à mettre à jour le code client.

Par exemple:

class Client 
{ 

    DatabaseClass DC = new DatabaseClass(); 
    DC.PerformMethod(); //Blissfully unaware of the methods inner workings. 

} 

class DatabaseClass 
{ 

    public void PerformMethod() 
    { 
     //Encapsulate DB Logic here. If you need to change it, you can just change it here and the client needs to know nothing of it 
    } 

} 
1

Tout problème en informatique peut être résolu en ajoutant une couche d'indirection

-David Wheeler

Vous devez envelopper votre service dans un couche d'abstraction - je crois que cela s'appelle le modèle de proxy de service. Ensuite, tous vos clients interagiraient avec le proxy, et si votre service change à l'avenir, il vous suffit de changer le proxy - à moins bien sûr que quelque chose de fondamental change dans le fonctionnement du service, auquel cas vous le feriez avoir à changer de client, naturellement.

Questions connexes