Dans mon précédent article j’ai expliqué le quatrième principe SOLID (Ségrégation d’interface).
N’hésitez pas a découvrir les autres principes SOLID dans cette série d’articles:
Aujourd’hui je vous propose une explication pour le cinquième principe S.O.L.I.D, c’est le principe «Inversion De Dépendance» (Dependency Inversion), ce principe est basé sur les affirmations suivantes:
On comprend mieux avec un exemple!
public sealed class Customer
{
public int Id { get; set; }
public string Name { get; set; }
}
public sealed class CustomerRepository
{
public CustomerRepository(string dbConnectionString)
{
// Some implementation here
}
public void AddCustomer(Customer customer)
{
// Some implementation here (database)
}
}
public sealed class CustomerService
{
private CustomerRepository _customerRepository = new CustomerRepository("dbConnectionString");
public void Add(Customer customer)
{
_customerRepository.AddCustomer(customer);
}
Le code est incorrect car la classe CustomerService dépend de la classe CustomerRepository et sait également comment l’instancier.
public sealed class Customer
{
public int Id { get; set; }
public string Name { get; set; }
}
public interface ICustomerRepository
{
void AddCustomer(Customer customer);
}
public sealed class CustomerRepository : ICustomerRepository
{
public CustomerRepository(string dbConnectionString)
{
// Some implementation here
}
public void AddCustomer(Customer customer)
{
// Some implementation here (database)
}
}
public sealed class CustomerService
{
private ICustomerRepository CustomerRepository { get; }
public CustomerService(ICustomerRepository customerRepository)
{
CustomerRepository = customerRepository;
}
public void AddCustomer(Customer customer)
{
CustomerRepository.Add(customer);
}
}
Le code est correct car la classe CustomerService ne dépend que de l’interface ICustomerRepository, elle ne connaît pas l’implémentation ni comment l’instancier.
Si vous avez aimé cet article, n’hésitez pas à le partager !