2016-09-08 5 views
1

Я в настоящее время реорганизую свой код и заблокирован. У меня есть оператор switch, который я просто знаю, что можно реорганизовать, у меня просто нет опыта для этого :(Большинство шаблонов и способов работы с переключателями фокусируются на управлении параметрами, которые отличаются методами, но здесь это не так. идеи, что я могу с этим поделать? Будет действительно признателен за любые подсказки.Оператор переключателя рефакторинга, содержащий методы без параметров

public void manageMenuAction(MenuItem item, GiftListPresenterViewConnector activityConnector) { 
    switch (item.getItemId()) { 
     case R.id.nav_your_account: 
      activityConnector.goToEditAccount(); 
      break; 
     case R.id.help: 
      activityConnector.goToHelpScreen(); 
      break; 
     case R.id.nav_about: 
      createInfoDialog(); 
      break; 
     case R.id.nav_exit: 
      activityConnector.exitApp(); 
      break; 
     case R.id.nav_logout: 
      clearLocalData(); 
      activityConnector.logout(); 
      break; 
    } 
} 

я кодирования для Android, поэтому работать с Java 1.7. GiftListPresenterViewConnector является интерфейсом.

+3

Это выглядит как абсолютно корректный оператор 'switch'. Почему вы хотите его реорганизовать? –

+0

Как вы называете метод? –

+1

Это самый простой способ сделать что-то. Почему вы хотите изменить его? –

ответ

1

Теоретически, вы могли бы реализовать общий MenuItem.id, когда MenuItem хранит этот общий экземпляр и при входе в manageMenuAction просто вызывает MenuItem.getItemId().executeBehavior().

(Вы можете также сделать общий MenuItem вместо того чтобы держать общий экземпляр id)

Честно говоря, я бы не сделать это, так как это id, вероятно, просто простой Integer и переключатель случай, вероятно, будет Самый простой способ сделать это

+1

Да, tbh Я не чувствую себя достаточно сильным, чтобы рыться с помощью собственных методов андроида: D – Kamajabu

+0

Хе-хе, я знаю, что вы имеете в виду, скажите мне, что вы решили делать :) –

0

Элемент, который выделяется для меня, это createInfoDialog, потому что это единственный путь, который не проходит через activityConnector. Если вы должны были сделать этот метод GiftListPresenterViewConnector, тогда весь этот метод можно было бы переместить в этот класс, и ему не нужно было бы воспринимать его как аргумент. Но я согласен с другими комментаторами; этот метод выглядит отлично.

+1

Да, я мог бы перемещать createInfoDialog, даже думал об этом. Но перенос всего оператора switch в GiftListPresenterViewConnector, который является интерфейсом, реализованным моей деятельностью, не является вариантом, он должен быть в презентаторе (основная цель MVP - извлечь эту логику из представления) :(Спасибо за ваш совет! – Kamajabu

0

Еще один вариант, который я вижу: вы можете использовать карту.

  1. ключ бы ваши идентификаторы товар
  2. значения будет какая-то общий объект обратного вызова

Тогда вы могли бы написать код, как

callbacks.get(item.getItemId()).doCallback(); 

Но это также кажется бит «надуманный»; и, вероятно, это не очень «андроидный стиль» в том, чтобы делать что-то.

1

Рассмотрите возможность использования шаблона «команды» https://en.wikipedia.org/wiki/Command_pattern

+0

Не было бы он требует, чтобы я создал 5 дополнительных классов, чтобы избавиться от одного оператора switch? – Kamajabu

+0

@ Reiz3N Возможно, это было бы, но это могло бы быть менее болезненным, чем вы думаете. Классы должны были бы только отличаться, по крайней мере, сначала к методу действия, который будет вызывать команда. –

+0

Дело в том, что вы можете делать какие-то действия не только из меню, но и из любого другого места. Вы используете mvp, поэтому, возможно, вам не следует использовать константы id, специфичные для ii, но не внутри , –