À mesure que les applications augmentent en taille et en complexité, la gestion de l'interdépendance entre les sous-systèmes peut devenir difficile. Un modèle de conception de façade simplifie cette interaction et fournit une interface unifiée à un ensemble d'interfaces dans un sous-système.
Cas d'utilisation
Considérez une application d'achat en ligne qui permet aux clients de parcourir les produits, de les ajouter à un panier et de passer à la caisse. L'application comporte différents sous-systèmes responsables de la gestion d'autres parties, telles que les systèmes d'inventaire, de paiement et d'expédition. Ces sous-systèmes ont des interfaces différentes et doivent communiquer entre eux pour effectuer un achat.
Le problème est que la gestion de cette communication entre les sous-systèmes peut être difficile à mesure que l'application se développe. Les modifications apportées à un sous-système peuvent avoir un effet en cascade sur d'autres sous-systèmes, entraînant une base de code enchevêtrée et difficile à maintenir.
Nous pouvons utiliser le modèle de conception de façade pour simplifier l'interaction entre les sous-systèmes. Un modèle de façade fournit un point d'entrée unique à un sous-système, cachant sa complexité au client. Dans notre exemple, nous pouvons créer une façade qui fournit une interface unifiée aux sous-systèmes d'inventaire, de paiement et d'expédition.
Conditions préalables
- Connaissance de base des concepts OOPS.
- Toute connaissance en langage de programmation.
L'article présente des modèles de conception de façade utilisant le langage de programmation C#.
Objectifs d'apprentissage
- Comment coder à l'aide d'un modèle de conception de façade
Commencer
Commençons par définir les interfaces de nos sous-systèmes
public interface IInventorySystem { void Update(int productId, int quantity); bool IsAvailable(int productId, int quantity); } public interface IPaymentSystem { bool Charge(double amount); } public interface IShippingSystem { bool Ship(string address); }
Ensuite, nous pouvons implémenter les sous-systèmes :
public class InventorySystem : IInventorySystem { public void Update(int productId, int quantity) { // update inventory } public bool IsAvailable(int productId, int quantity) { // check if inventory is available return true; } } public class PaymentSystem : IPaymentSystem { public bool Charge(double amount) { // charge the customer return true; } } public class ShippingSystem : IShippingSystem { public bool Ship(string address) { // ship the product return true; } }
Enfin, nous pouvons créer une façade qui fournit une interface simple à ces sous-systèmes :
public class OrderFacade { private IInventorySystem _inventorySystem; private IPaymentSystem _paymentSystem; private IShippingSystem _shippingSystem; public OrderFacade() { _inventorySystem = new InventorySystem(); _paymentSystem = new PaymentSystem(); _shippingSystem = new ShippingSystem(); } public bool PlaceOrder(int productId, int quantity, double amount, string address) { bool success = true; if (_inventorySystem.IsAvailable(productId, quantity)) { _inventorySystem.Update(productId, -quantity); success = success && _paymentSystem.Charge(amount); success = success && _shippingSystem.Ship(address); } else { success = false; } return success; } }
Dans la classe OrderFacade
, nous créons des instances des sous-systèmes et proposons une méthode simple PlaceOrder
qui prend en compte l'identifiant du produit, la quantité, le montant et l'adresse de livraison. La technique PlaceOrder
utilise les sous-systèmes pour vérifier l'inventaire, facturer le client et expédier le produit.
Avec le modèle de façade, le code client peut créer une instance de la classe OrderFacade
et appeler la méthode PlaceOrder
sans se soucier des détails des sous-systèmes.
var order = new OrderFacade(); bool success; // place an order success = order.PlaceOrder(productId: 123, quantity: 1, amount: 99.99, address: "123 Main St"); if (success) { Console.WriteLine("Order placed successfully"); } else { Console.WriteLine("Unable to place order"); }
Dans cet exemple, nous avons utilisé le modèle de façade pour simplifier l'interaction entre les sous-systèmes dans une application d'achat en ligne. Le code client n'a besoin d'interagir qu'avec la classe "OrderFacade" et n'a pas besoin de connaître les sous-systèmes d'inventaire, de paiement et d'expédition.
Conclusion
Le modèle de conception de façade simplifie l'interaction entre les sous-systèmes et fournit une interface unifiée à un ensemble d'interfaces dans un sous-système. Cela peut aider à réduire le couplage et à améliorer la maintenabilité des applications volumineuses et complexes. Cet article explore le modèle de conception de façade en C# avec un cas d'utilisation et des exemples de code. En utilisant le modèle de façade, nous pouvons simplifier la base de code et faciliter sa maintenance et son extension.
Merci d'avoir lu, et j'espère que vous avez aimé l'article. Veuillez fournir vos commentaires dans la section des commentaires.
Suivez-moi sur
, , , , ,
Plus de modèles de conception —
Également publié