Roadmap › Design Patterns (GoF + Enterprise) in C# › Module: Structural Patterns
Lessons in this course (18)
8. Facade, Proxy and Composite
IntermediateMediumLesson 8 of 18
Facade — one simple interface over a complex subsystem.
csharp
public class CheckoutFacade(IInventory inv, IPayment pay, IShipping ship, IEmail email)
{
public async Task<OrderResult> PlaceOrder(Cart cart)
{
await inv.ReserveAsync(cart);
var receipt = await pay.ChargeAsync(cart.Total);
var tracking = await ship.BookAsync(cart);
await email.SendConfirmationAsync(cart.CustomerEmail, tracking);
return new OrderResult(receipt, tracking);
}
}Proxy — a stand-in that controls access: lazy loading (EF Core lazy-loading proxies), remote proxies (gRPC/WCF clients), protection proxies (authorisation checks), caching proxies.
Composite — treat individual objects and groups the same way (tree structures).
csharp
public interface IMenuItem { decimal Price(); }
public record Dish(string Name, decimal Cost) : IMenuItem { public decimal Price() => Cost; }
public class Combo(params IMenuItem[] items) : IMenuItem { public decimal Price() => items.Sum(i => i.Price()) * 0.9m; }