Проверяет понимание принципа Dependency Inversion (DIP) из SOLID и его реализацию через интерфейсы для создания слабосвязанного кода.
Принцип Dependency Inversion (DIP) — это пятый принцип SOLID. Он утверждает, что модули верхнего уровня не должны зависеть от модулей нижнего уровня; оба должны зависеть от абстракций. Абстракции не должны зависеть от деталей; детали должны зависеть от абстракций. На практике это означает, что вместо того чтобы класс напрямую создавал экземпляры зависимостей, он получает их через интерфейс.
Интерфейс определяет контракт (набор методов), который должна реализовать конкретная зависимость. Класс верхнего уровня работает только с этим интерфейсом, не зная о конкретной реализации. Это позволяет легко заменять одну реализацию на другую (например, для тестирования или смены базы данных).
// Интерфейс абстракции
interface ILogger {
void Log(string message);
}
// Конкретная реализация
class ConsoleLogger : ILogger {
public void Log(string message) {
Console.WriteLine(message);
}
}
// Класс верхнего уровня зависит от абстракции
class OrderService {
private readonly ILogger _logger;
public OrderService(ILogger logger) {
_logger = logger;
}
public void CreateOrder() {
// бизнес-логика
_logger.Log("Order created");
}
}
// Внедрение зависимости через конструктор
var logger = new ConsoleLogger();
var service = new OrderService(logger);Вывод: Dependency Inversion через интерфейсы делает код гибким, тестируемым и легко расширяемым. Применяйте его везде, где возможна замена реализации, особенно в крупных проектах с модульной архитектурой.