2010-03-04 5 views
0

Je suis curieux de savoir comment les autres géreraient cette situation. J'ai une couche de domaine qui inclut un objet d'adresse. J'ai alors une application qui utilise cet objet. De plus, il existe un service Web asp.net asmx qui effectue la validation des adresses en allant sur un service Web tiers.Séparer des ensembles avec des références Web

Je suis curieux de savoir comment gérer cette fonctionnalité. Je ne veux pas mettre la référence de service et le code pour accéder au service Web dans la couche de domaine. Il semble également erroné de le mettre dans la couche application.

Ma meilleure solution actuelle consiste à créer un troisième assemblage qui fait référence à la couche de domaine d'origine ET au service Web de validation. Cela garde ma couche de domaine un peu plus propre sans références externes. Comment gérez-vous cette situation?

Répondre

0

Eh bien, est la validation de la partie de l'adresse de la logique de l'application (UI) ou une partie de vos exigences de domaine?

Si c'est une fonction de l'application, elle va dans la couche de l'application. S'il s'agit d'une fonction de domaine principal, elle se trouve dans la couche de domaine.

Si vous êtes préoccupé par le couplage, par exemple si vous pensez que vous pourriez décider d'utiliser un service de validation d'adresse différent à l'avenir, placez une abstraction dessus. Créez une interface et une classe wrapper:

public interface IAddressValidator 
{ 
    bool ValidateAddress(Address address); 
} 

public class FooAddressValidator : IAddressValidator 
{ 
    private FooService service; 

    public FooAddressValidator(FooService service) 
    { 
     this.service = service; 
    } 

    public bool ValidateAddress(Address address) 
    { 
     return service.ValidateAddress(address.StreetLine1, address.City, 
      address.State, address.Country); 
    } 
} 

Ou quelle que soit la logique. Ensuite, faites en sorte que votre application (ou modèle de domaine) dépende de IAddressValidator au lieu du service lui-même, et ventilez dans une instance concrète IAddressValidator depuis la couche la plus externe.

Vous pouvez mettre l'interface principale IAddressValidator dans votre modèle de domaine et conserver le FooAddressValidator dans un assemblage externe qui n'est référencé que par l'exécutable. De cette façon, votre domaine ne dépend pas réellement du service Web, mais vous avez toujours la validation d'adresse dans le cadre de votre logique de domaine. Cela permet également de tester plus facilement tout ce qui utilise le composant de validation d'adresse, puisque vous n'avez pas réellement besoin d'effectuer d'appels de service Web, vous pouvez utiliser une autre instance MockAddressValidator pour cela.

+0

Merci pour votre suggestion. Je suppose que c'est une fonction de domaine de base et que toute application devrait pouvoir valider une adresse. Merci encore. –

Questions connexes