29 Сентябрь 2017

Comments

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

DRY — Не повторяйтесь

Часто бывает, что в проекте появляется хотя бы одно-два месте, которое использовало один и тот же программный код. Ну вот например, у нас есть некий класс, который вычисляет результат сложение двух целочисленных значений, приведём его:

public class First {
    public Integer sum(Integer x, Integer y) {
        return x + y;
    }
}

В этой же системе мы хотим реализовать другой класс, который будет делать подобное действие, но над другим типом данных, положим Float

public class Second {
    public Float sum(Float x, Float y) {
        return x + y;
    }
}

Казалось бы, ничего особенного, где же здесь повторение кода? Верно, сигнатура методов отличная, однако, что в первом, что во втором случае, выполняется одинаковая работа — сложение. Типы данных конечно разные, но они имеют одно схожее свойство, оба типа являюстся надстройкой над примитивными типами int и float, а значит имеют схожие свойства. Тогда, вместо двух классов, мы можем создать один универсальный, таким образом будем следовать принципу DRY:

private class Unified<T extends Number> {
    public T sum(T x, T y) {
        Object result = null;
        if(x instanceof Integer) {
            result = (x.intValue() + y.intValue());
        } else if(x instanceof Float) {
            result = (x.floatValue() + y.floatValue());
        }

        return (T) result;
    }
}

Получилось конечно топорно, но принцип надеюсь понятен. Стоит отметить, что не все случаи могут быть описаны с помощью принципов проектирования.

 

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