tecnicas refactory refactorizacion codigo java android switch-statement refactoring

java - refactory - Instrucción de cambio de refactorización que contiene métodos sin parámetros



refactorizacion codigo (4)

Actualmente estoy refacturando mi código y me bloquearon. Tengo una declaración de switch que simplemente sé que se puede refactorizar, simplemente tengo falta de experiencia para hacerlo :( La mayoría de los patrones y formas de lidiar con interruptores se centran en la administración de parámetros que difieren en los métodos, pero aquí no es el caso. ¿Qué puedo hacer al respecto? Realmente agradecería cualquier pista.

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; } }

Estoy codificando para Android, así que trabajo con Java 1.7. GiftListPresenterViewConnector es una interfaz.



El elemento que se destaca para mí es createInfoDialog , porque es la única ruta que no pasa por activityConnector . Si tuvieras que hacer un método de GiftListPresenterViewConnector , entonces este método completo podría moverse a esa clase y no necesitaría tomarlo como argumento. Pero estoy de acuerdo con otros comentaristas; este método se ve bien


La otra forma de opción que veo es que podrías estar usando un Mapa.

  1. la clave sería su ID de artículo
  2. los valores serían algún objeto genérico de devolución de llamada

Entonces podrías escribir código como

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

Pero eso también parece un poco "exagerado"; y probablemente no sea mucho "estilo androide" de hacer cosas.


Teóricamente, podría implementar un comportamiento genérico MenuItem.id cuando MenuItem contenga esta instancia genérica y cuando entre en manageMenuAction solo invoque MenuItem.getItemId().executeBehavior() .

(También puede crear un MenuItem genérico en lugar de tener una instancia genérica de la id )

Honestamente, yo no haría eso ya que esta id es probablemente solo un Integer simple y una caja de conmutadores probablemente sea la forma más simplificada de hacerlo