C# Design Patterns: the Façade pattern
April 14, 2009
Summary
Access multiple classes in one simple to use class. This class is often static too.
Example
A common use of the Façade pattern is with data access managers, a façade class that contains only static methods for CRUD operations. Another example might be a class that handles payment in an online store. This façade class would link into multiple payment providers (paypal, visa/mastercard) as well as updating any order details in a database table. Rather than making the UI perform 10-20 lines of code, this could be done in a simple CheckoutManager.ProcessPayment(…) method.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class UserManager | |
{ | |
// The main implementation of IRepository would be internal to your Core/Domain project, | |
// so consumers of your API couldn't change the database directlry without going through | |
// your façade classes. | |
private IRepository _repository; | |
public UserManager() | |
{ | |
_repository = new SqlRepository("some connection string from a config file"); | |
} | |
public UserManager(IRepository repository) | |
{ | |
_repository = repository; | |
} | |
public User GetById(Guid id) | |
{ | |
return _repository.ExecuteSql<User>("SELECT * FROM User WHERE Id=@Id", id) | |
} | |
public User GetByEmail(string email) | |
{ | |
return _repository.ExecuteSql<User>("SELECT * FROM User WHERE Email=@Email", email) | |
} | |
// more methods User-specific methods. | |
} |
I'm Chris Small, a software engineer working in London. This is my tech blog. Find out more about me via Github, Stackoverflow, Resume