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.
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. –