29 Октябрь 2017

Comments

0
 Октябрь 29, 2017
 0
Category Принципы

Один из принципов SOLID это принцип инверсии зависимостей. Его описание звучит как: «Зависимость на Абстракциях. Нет зависимости на что-то конкретное»

В самом общем случае, этот принцип повторяет последние 2 принципа SOLID. Характерной чертой этого принципа является слабая связанность системы с её компонентами. Рассмотрим пример с логированием:

public interface Logger {
    public void log(String message);
}
public ConsoleLogger implements Logger {
    public void log(String log) {
        System.out.println(log);
    }
}
public DBLogger implements Logger {
    public void log(String log) {
        //Некоторый класс базы данных, реализацию опускаем
        DB::getInstance().log(log);
    }
}
public class SomeClass {
    private Logger logger;
    
    public SomeClass(Logger logger) {
        this.logger = logger;
    }
    public void someMethod() {
        try {
            //Здесь проверяется блок, кототорый может выкинуть исключение
        } catch(Exception e) {
            this.logger.log(e.getMessage());
        }
    }
}
public class Test {
    @Test
    public void test() {
        SomeClass someClass = new SomeClass(new ConsoleLogger());
        someClass.someMethod();
    }
}

Как вы можете видеть, в классе Test мы используем constructor dependency injection. Тестируемый конструктор принимает интерфейс класса логера, а уже его конкретная реализация ложится на клиентские класс, т.е Test.

Добавить комментарий