J'écris une application client/serveur, où le client est une application Windows Forms et le serveur est un service WCF hébergé dans un service Windows. Notez que je contrôle les deux côtés de l'application. J'essaie d'implémenter la pratique du codage par rapport à une interface: c'est-à-dire que j'ai un assemblage partagé qui est référencé par l'application cliente. Ce projet contient mes contrats de service et interfaces WCF qui seront exposés aux clients. J'essaye seulement d'exposer des interfaces aux clients, de sorte qu'ils soient seulement dépendants d'un contrat, pas d'une implémentation spécifique. Une des raisons pour cela est que je peux avoir ma mise en œuvre du service, et le changement de domaine à tout moment sans avoir à recompiler et redéployer les clients. Les interfaces/contrats ne seront pas modifiés dans ce cas. Je dois seulement recompiler et redéployer mon service WCF.Usines ou Injection de dépendances pour l'instanciation d'objet dans WCF lors du codage sur une interface?
Le problème de conception auquel je fais face est: sur le client, comment créer de nouvelles instances d'objets, par ex. ICustomer
, si le client ne connaît pas l'implémentation concrète Customer
? J'ai besoin de créer un nouveau client pour être enregistré dans la base de données. Est-ce que j'utilise l'injection de dépendances ou une classe Factory pour instancier de nouveaux objets ou dois-je simplement autoriser le client à créer de nouvelles instances d'implémentations concrètes?
Je ne fais pas TDD, et je n'aurai typiquement qu'une implémentation de ICustomer
ou toute autre interface exposée.
@marc_s: Je pense que vous avez mal compris tout à fait ma question. Je pense que je devrais le modifier pour le rendre plus clair. Je comprends parfaitement la WCF et tout ce que vous avez expliqué. Mais je n'utilise pas WCF comme ça. Le client et le serveur partagent l'assembly MyProject.Shared, qui contient mes types et interfaces (ou les contrats comme je l'appelle, mais pas [DataContract]). Ils partagent donc exactement les mêmes types du même assemblage. J'utilise le NetDataContractSerializer, et en utilisant WCF pour émuler quelque chose de plus proche de .Net remoting –