powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как отрефакторить данный код
16 сообщений из 16, страница 1 из 1
Как отрефакторить данный код
    #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
Как отрефакторить данный код
    #39774108
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JulT,

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

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

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

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


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

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


new MessageError(...)
А что скрыто за точками? Там - текст который зависит от кондишенов?
...
Рейтинг: 0 / 0
Как отрефакторить данный код
    #39774131
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonтекст который зависит от кондишенов?+1
В этом вся соль вопроса.
А не в удалении if.
...
Рейтинг: 0 / 0
Как отрефакторить данный код
    #39774139
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сначала надо определиться по какому критерию рефакторить, это пункт 1. Пункт два прямо зависит от пункта 1
...
Рейтинг: 0 / 0
Как отрефакторить данный код
    #39774145
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
new MessageError(MessageCategory.ERROR, SERVICE_INVALID)
new MessageError(MessageCategory.ERROR, PRODUCT_NOT_FOUND)
или
new MessageError(MessageCategory.WARNING, SERVICE_UNKNOWN)
...
Рейтинг: 0 / 0
Как отрефакторить данный код
    #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
Как отрефакторить данный код
    #39774239
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JulT, а что за сервис то и как так может быть, что он анноун?
...
Рейтинг: 0 / 0
Как отрефакторить данный код
    #39774244
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОзверинJulT, а что за сервис то и как так может быть, что он анноун?

Если же брать общий случай, то все обработку ошибок надо выносить на уровень @ControllerAdvice`ов. Для себя использовать какие-нить кастомные exception`ы, унаследованные от RuntimeException`а, чтобы код не загрязнять.
Ошибку на уровне репозитория типа NotFoundException обрабатывать в сервисе не надо, пусть летит дальше, либо делать ретроу своей ошибки, чтобы код опять же не загрязнять.
...
Рейтинг: 0 / 0
Как отрефакторить данный код
    #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
Как отрефакторить данный код
    #39774793
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valentin KolesnikovReturn должен быть один в методе.
это весьма спорное утверждение
...
Рейтинг: 0 / 0
Как отрефакторить данный код
    #39774794
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть Guard Expressions.
...
Рейтинг: 0 / 0
Как отрефакторить данный код
    #39776141
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
всем спасибо
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Как отрефакторить данный код
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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