Encontré este código en el que tres controladores usan una llamada a un método, por ejemplo ClassA.search (a, b, flag). Esta es una versión simplificada del método:¿Es esta una buena manera de reutilizar/compartir un método?
public List<Result> search(Object a, Object b, boolean flag) {
//do some code logic here, common to the 3 controllers
//at the middle there is:
if (flag) {
//code that affects 2 Controllers
} else {
//code affects only 1
}
//some more common code
//some more code with the flag if else
}
¿Es esta una buena idea porque el código se reutiliza? ¿O existe una mejor manera de poder hacer la reutilización del código pero no introducir este indicador para la personalización del código del llamador del método (cliente) (como dividirlo en 3 métodos diferentes pero aún así poder declarar un método refactorizado de código común)?
Estoy de acuerdo con esto siempre que no termine convirtiendo variables locales en campos para que funcione. –
¿Por qué las variables locales son malas? Si el estado que tiene que pasar una y otra vez a través de los parámetros es tan significativo, cree un objeto de una sola vez con el estado inicializado en los campos finales en el constructor y utilícelo solo una vez. Función en esteroides ;-). –
Eso es cierto; sin embargo, agregar una clase con campos (¿y un constructor?) Es mucho trabajo para evitar una bandera. ;) –