Я хотел бы некоторые советы по рефакторингу следующего метода:рефакторинга вложенный переключатель на объекты
public boolean makeDecision(String group, int level, int primaryAmount, int secondaryAmount)
{
if (group.equals("A"))
{
switch (level)
{
case 0 : return primaryAmount > 10000;break;
case 1 : return primaryAmount > 20000;break;
default : return secondaryAmount > 30000; break;
}
}
else if (group.equals("B"))
{
switch (level)
{
case 0 : return primaryAmount > 40000;break;
case 1 : return primaryAmount > 50000;break;
default : return secondaryAmount > 60000; break;
}
}
else if (group.equals("C"))
{
switch(level)
{
case 0 : return primaryAmount > 70000;break;
case 1 : return primaryAmount > 80000;break;
default : return secondaryAmount > 90000; break;
}
}
return false;
}
То, что я хотел бы достичь:
- Разрешить код следовать открыто/закрыто поскольку во времени будет больше групп/уровней.
- Удалите дублирование в инструкции переключателя уровня.
- В идеале удалите оператор переключения верхнего уровня группы.
как мне отправить на тип группы? вы говорите, что у меня должен быть отдельный класс для каждой группы? – Michael
Отправка, я имею в виду вызов метода по группе. Итак, 'group.GetLevel' в приведенном выше примере. На данный момент группа не является иерархией классов, потому что логика достаточно проста, чтобы вписаться в одно место. Вы можете написать другой подкласс для каждой группы, но поскольку они отличаются только данными, а не поведением, я бы этого не сделал. Аналогично для уровня. Я просто буду добавлять новые подклассы, если они действительно отличаются поведением. –