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.
Considere utilizar el patrón de diseño ''comando'' https://en.wikipedia.org/wiki/Command_pattern
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.
- la clave sería su ID de artículo
- 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