Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Как отрефакторить данный код / 16 сообщений из 16, страница 1 из 1
14.02.2019, 20:25
    #39774102
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отрефакторить данный код
Всем привет. Подскажите пожалуйста, как можно красиво отрефакторить данный кусок кода:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
public ResponseHolder getPaymentById(parameters) {
        if (condition 1){
            return ResponseHolder.builder()
                       .fail(....)
                       .build();
        }
        if (condition 2){
            return ResponseHolder.builder()
                       .fail(....)
                       .build();
        }

        some logic

        if (condition 3){
            return ResponseHolder.builder()
                       .fail(....)
                       .build();
        }
        
        return ResponseHolder.builder()
                   .success(....)
                       .build();
    }
Спасибо!
...
Рейтинг: 0 / 0
14.02.2019, 20:35
    #39774108
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отрефакторить данный код
JulT,

switch ?
...
Рейтинг: 0 / 0
14.02.2019, 20:37
    #39774111
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отрефакторить данный код
вадяJulT,

switch ?
нет, свитч это не красиво)
...
Рейтинг: 0 / 0
14.02.2019, 20:39
    #39774112
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отрефакторить данный код
А что здесь происходит?

Код: java
1.
.fail(....)
...
Рейтинг: 0 / 0
14.02.2019, 20:40
    #39774113
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отрефакторить данный код
maytonА что здесь происходит?

Код: java
1.
.fail(....)


new MessageError(...)
...
Рейтинг: 0 / 0
14.02.2019, 20:41
    #39774114
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отрефакторить данный код
JulTmaytonА что здесь происходит?

Код: java
1.
.fail(....)


new MessageError(...)
А что скрыто за точками? Там - текст который зависит от кондишенов?
...
Рейтинг: 0 / 0
14.02.2019, 21:43
    #39774131
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отрефакторить данный код
maytonтекст который зависит от кондишенов?+1
В этом вся соль вопроса.
А не в удалении if.
...
Рейтинг: 0 / 0
14.02.2019, 22:00
    #39774139
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отрефакторить данный код
Сначала надо определиться по какому критерию рефакторить, это пункт 1. Пункт два прямо зависит от пункта 1
...
Рейтинг: 0 / 0
14.02.2019, 22:11
    #39774145
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отрефакторить данный код
new MessageError(MessageCategory.ERROR, SERVICE_INVALID)
new MessageError(MessageCategory.ERROR, PRODUCT_NOT_FOUND)
или
new MessageError(MessageCategory.WARNING, SERVICE_UNKNOWN)
...
Рейтинг: 0 / 0
15.02.2019, 00:01
    #39774167
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отрефакторить данный код
JulTnew MessageError(MessageCategory.ERROR, SERVICE_INVALID)
new MessageError(MessageCategory.ERROR, PRODUCT_NOT_FOUND)
или
new MessageError(MessageCategory.WARNING, SERVICE_UNKNOWN)
А вы - хитрая лиса. Почему-бы сразу это не написать?

Вообще рефакторинг предполагает некий набор эквивалентных трансформаций
которые улучшают характеристики кода. И эти транформации должны быть доказуемыми.

А у вас - что? Что такое some logc? Мы можем эффективно свернуть часть вашего кода.
Но нам нужно понимать какая функциональная связь существует между condition 3
и some logic. Вы не дали этой информации.

Если conditions завияст от parameters и если выбросить этот some logic то ваш код это по сути (в стиле
функционого программирования) мог бы выглядеть так.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Object decodeMessageError(parameters) {
    // ....
    return new MessageError(condition1 ? ERROR ? condition2 : ...., ...... );
}

public ResponseHolder getPaymentById(parameters) {
     return ResponseHolder.builder()
                       .fail(decodeMessageError(parameters))
                       .build()
}
...
Рейтинг: 0 / 0
15.02.2019, 09:59
    #39774239
Озверин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отрефакторить данный код
JulT, а что за сервис то и как так может быть, что он анноун?
...
Рейтинг: 0 / 0
15.02.2019, 10:05
    #39774244
Озверин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отрефакторить данный код
ОзверинJulT, а что за сервис то и как так может быть, что он анноун?

Если же брать общий случай, то все обработку ошибок надо выносить на уровень @ControllerAdvice`ов. Для себя использовать какие-нить кастомные exception`ы, унаследованные от RuntimeException`а, чтобы код не загрязнять.
Ошибку на уровне репозитория типа NotFoundException обрабатывать в сервисе не надо, пусть летит дальше, либо делать ретроу своей ошибки, чтобы код опять же не загрязнять.
...
Рейтинг: 0 / 0
15.02.2019, 20:48
    #39774767
Valentin Kolesnikov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отрефакторить данный код
JulTВсем привет. Подскажите пожалуйста, как можно красиво отрефакторить данный кусок кода:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
public ResponseHolder getPaymentById(parameters) {
        if (condition 1){
            return ResponseHolder.builder()
                       .fail(....)
                       .build();
        }
        if (condition 2){
            return ResponseHolder.builder()
                       .fail(....)
                       .build();
        }

        some logic

        if (condition 3){
            return ResponseHolder.builder()
                       .fail(....)
                       .build();
        }
        
        return ResponseHolder.builder()
                   .success(....)
                       .build();
    }
Спасибо!

Return должен быть один в методе.

Хорошего Вам дня!
...
Рейтинг: 0 / 0
15.02.2019, 23:30
    #39774793
chpasha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отрефакторить данный код
Valentin KolesnikovReturn должен быть один в методе.
это весьма спорное утверждение
...
Рейтинг: 0 / 0
15.02.2019, 23:36
    #39774794
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отрефакторить данный код
Есть Guard Expressions.
...
Рейтинг: 0 / 0
19.02.2019, 13:12
    #39776141
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отрефакторить данный код
всем спасибо
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Как отрефакторить данный код / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]