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; }