29 Сентябрь 2017

Comments

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

Первый из принципов проектирования, это принцип единственной ответственности (Simple Responsibility)

Иногда смотришь на код, и думаешь, чего тут только нет. Подключения к БД нет, Роутинга нет, а ведь могло бы и быть. Вам наверное приходилось видеть подобные классы:

public class StringHelper {
    public String parseString(String str) {
        try {
            // Некоторая логика
        } catch(Exception e) {
            log(e.getMessage);
        }
        return str;
    }
    // Некоторый код
    public void log(String message) {
        System.out.println(message);
    }
}

Как видим, вроде класс как класс. По имени, вроде выполняет операции со строками. Но что тут делает метод log() ????? Ето не базовый функционал этого класса. Этот класс должен делать операции над строками складывать их, вычитать, чего только не делать, но со строками, а логирование выходит за рамки этого класса, потому было бы логично создать некоторый класс Logger

который будет заниматься логированием, а не сложением строк к примеру.

Собственно в этои и заключается принцип единственной ответственности. Каждый должен заниматься своим делом.  Потому лучше сделать так:

Объявим интерфейс Logger

public interface Logger {
    public void log(String message);
}

Реализуем этот интерфейс так, чтобы лог у нас сыпался в консоль (Да, самое простое )))

public class ConsoleLogger implements Logger { 
    public void log(String message) { 
        System.out.println(message); 
    } 
}

А теперь напишем класс для работы со строками

public class StringHelper {
    private Logger logger;
    
    public StringHelper(Logger logger) {
        this.logger = logger;
    }

    public String concat(String ls, String rs) {
        String result = null;
        try {
            //Some logic
        } catch(Exception e) {
            this.logger.log(e.getMessage);
        }
        return result;
    }
}

Как видите, мы разложили первый код на составные части, которые занимаются своим делом. Так их легче будет поддерживать и тестировать, вобщем всё легче.

Так же стоит отметить, что мы здесь помимо того, что разобрали принцип единственной ответственности, ещё и реализовали другой принцип: Dependency Injection Вот ссылка на него: https://it-spring.ru/Принцип-инверсии-зависимостей/

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