Dans le sens où vous avez écrit votre exemple, oui, cela va coupler étroitement votre code. Principalement en raison de new
qui agit comme un mot-clé glue
à vos dépendances.
Gardez à l'esprit que le modèle Facade ne vous empêchera pas de créer des dépendances ou du code étroitement couplés. L'objectif principal de son utilisation est de rendre votre composant logiciel plus facile à utiliser, plus lisible, plus facile à maintenir et enfin, plus facile à tester.
Si vous voulez éviter un couplage étroit, vous devez passer des dépendances abstraites dans votre classe Facade :
public class Facade
{
private readonly ISystemA subsystemA;
private readonly ISystemB subsystemB;
public Facade(ISystemA subsystemA, ISystemB subsystemB)
{
this.subsystemA = subsystemA;
this.subsystemB = subsystemB;
}
public void CreateAccount()
{
this.subsystemA.CreateCreditCard();
this.subsystemB.CheckCreditCard();
}
}
Vous devez créer des interfaces (ou des classes abstraites) :
public interface ISystemA
{
void CreateCreditCard();
//other methods here
}
public interface ISystemB
{
void CheckCreditCard();
//other methods here
}
De cette façon, vous vous assurez que votre façade ne dépend pas de l'implémentation, mais plutôt de l'abstraction. Vous pourrez passer n'importe quelle implémentation qui implémente ISystemA
o ISystemB
les interfaces.
Je vous suggère d'en lire plus sur Injection de dépendances et des conteneurs qui vous aideront grandement à envelopper les graphes de dépendance des classes et à automatiser l'injection de constructeurs dans ces classes.