Использование принципа СУХОЙ для функций с различными возвращаемыми значениями и типами - PullRequest
2 голосов
/ 16 июня 2019

скажем, у меня есть два метода

public int findPages() {
    return this.selectors
        .getPagesSelector()
        .map(selector -> {
            Elements htmlElement = this.htmlPage.select(selector);
            return NumberUtils.toInt(htmlElement.text(), 1);
        })
        .orElse(1);
}
private String findPercent(Element product, double oldPrice, double newPrice) {
    return this.selectors
        .getPercentSelector()
        .map(selector -> {
            Elements htmlElement = product.select(selector);
            return StringUtils.defaultIfEmpty(htmlElement.text(), calculatePercent(oldPrice, newPrice));
        })
        .orElse(calculatePercent(oldPrice, newPrice));

Они делают разные вещи и возвращают разные типы, но разделяют структуры кода. Должен ли я преобразовать методы в более абстрактный для более чистого кода, или это не является нарушением принципа СУХОЙ? Спасибо!

1 Ответ

2 голосов
/ 16 июня 2019

Принцип «СУХОЙ» («Не повторяйся сам»), как следует из его названия, заключается в отсутствии нескольких реализаций одной и той же вещи. У вас есть два метода, findPages и findPercent. В совокупности эти два метода делают совершенно разные вещи, поэтому они не повторяются друг с другом. Таким образом, мы ищем частичные совпадения, однако, если мы посмотрим на код, мы увидим некоторые различия, так что это не совсем частичное совпадение. Один звонит pagesSelector, другой звонит percentSelector. Вы можете выполнить некоторую рефакторизацию, например, метод, который получит имя селектора и вернет правильный селектор, но это будет большая и сложная работа, которую не стоит делать, если у вас нет веских причин и для такой большой работы и небольшой выигрыш, имея два одинаково выглядящих кода, не является веской причиной. Если вам приходилось писать код такого типа, может быть, 100 раз, то было бы разумно либо реорганизовать ваш код, либо написать генератор кода и генерировать ваши методы с этим.

...