2016-11-06 3 views
-2

Я пытался реорганизовать код, и я наткнулся на этот фрагмент кода. Можете ли вы предложить какой-либо рефакторинг в нем и, пожалуйста, назовите то, что преломляло вас.Рефакторинг кода (если еще)

private void setUpBag(String language){ 
    if(language.equals("english")){ 
     /* add letters with English distribution to bag */ 
    } 
    else if(language.equals("french")){ 
     /* add letters with French distribution to bag */ 
    } 
    else if(language.equals("russian")){ 
     /* add letters with Russian distribution to bag */ 
    } 
    else{ 
     throw new IllegalArgumentException("Unknown language"); 
    } 
} 
+0

Существует не так много возможностей для улучшения, кроме использования оператора switch вместо if-else. Но, кстати, в чем проблема с вышеуказанным кодом? –

+0

Нет проблем, но я просто понял, что для каждого нового языка мне нужно добавить инструкцию else if, поэтому мне было интересно, есть ли способ реорганизовать его. –

ответ

5

Вы фактически нарушаете SRP (принцип единой ответственности), поэтому вам нужно прикоснуться к этой базе кода всякий раз, когда добавляется новый язык.

Для того, чтобы избежать огромного списка if else statements, вам необходимо слабосвязанной конструкцию, в которой addLetters() поведение должно быть реализовано в виде отдельного LanguageImpl класса (например, английский язык, и т.д ..), как показано в приведенном ниже коде, который использует состояние картина:

Шаг (1): Определить Language интерфейс

public interface Language { 
     addLetters(); 
    } 

Шаг (2): Определить Language Реализации

public English implements Language { 
     //implement addLetters() for English 
    } 

    //Implement other Language Classes as well in separate classes 

Step (3): Изменить setUpBag метод, который принимает Language объект

public void setUpBag(Language language){ 
     language.addLetters(); 
    } 

Каждый Language класс следует SRP здесь, который является ключевым в разработке объектно-ориентированного программирования приложений, то есть, каждый класс Язык обрабатывает только определенный поведение.

Вы можете посмотреть here для получения более подробной информации.

+0

+1 это «замена условного полиморфизма» рефакторинг: https://sourcemaking.com/refactoring/replace-conditional-with-polymorphism – JnRouvignac

+0

Да, вы правы – developer

Смежные вопросы