Variable de clase o singleton #174
-
Buenas, tenia una duda, en el caso de por ejemplo tener una clase llamada Contador, que representa comportamientos que haria un contador y que se necesitan varias instancias diferentes, tiene dentro de otras, la responsabilidad de calcular impuestos y tiene por ejemplo el metodo precioFinal(BienComercial objetoCatalogo) que devuelve su precio en base a los impuestos actuales del pais. Suponiendo que el metodo hace lo siguiente: Mi duda es: Cual seria una buena forma de solucion para almacenar el valor de porcentajeIva? Se me ocurren estas alternativas:
Muchas gracias si alguno me da una idea de cual puede ser mas util que las demas o si hay alguna mejor que esas q se me ocurrieron, saludoos!!! |
Beta Was this translation helpful? Give feedback.
Replies: 2 comments
-
Buenas @francorojo! Sin el enunciado es un poco dificil opinar, pero te comento lo que veo en base a lo que dijiste 👍
Esto me suena raro, porque un contador es un rol, parece como si estuvieras modelando al usuario return objetoCatalogo * (1 + porcentajeIva) Me huele raro (code smell)... pero nada con el contexto completo tal vez sirve que sea así, pero quiero dejar mi warning
Ojo, eso no es una variable de clase, eso es una variable de instancia. Una variable de clase es un atributo de la clase, no de la instancia y es global a todas las instancias, estos atributos de clase en Java se usan con En el caso de que hablaras de variable de instancia del contador, si deberías cambiarlo en todos los que corresponda, tal vez si tenes un repo de contadores puedas hacerlo, pero definitivamente es una desventaja. Como ventaja es que si queres tener contadores con distintos impuestos podes hacerlo.
Suena complejo, además deberías tener varios singletons, uno por cada país por lo que entiendo que decís.
Acá volves usar el termino variable de clase, en este caso de forma correcta 👍 . Es importante que esto lo uses de forma adecuada, porque las soluciones suelen implicar distintas cosas y después no se entiende 😕 Tratamos de no evaluar las decisiones en terminos de memoria, las optimizaciones quedan para otro momento. ℹ️ El tema que tenes con esto como te comentaba en el punto anterior, es que por lo que me decís es que contadores de distintos paises no podrían tener valores distintos de IVA. Entonces esta solución no cumple con los requerimientos.
Una constante en Java esta modelada como un atributo de clase que no cambia. Así que es parecida a la de arriba. Si quisieras varios valores bien conocidos en tu código son los enums, y a cada enum asociarle un valor en particular (revisate el apunte de java para programadores objetosos que ahi explica como usar enums de forma un poco mas interesante). Creo que hay una opción que no ponderaste. Me dijiste:
Y si modelas los objetos país? y a estos les asocias el IVA. |
Beta Was this translation helpful? Give feedback.
-
Muchas graciaaas! Nono la verdad que me surgio la duda y quise poner un ejemplo para preguntar, no estaba haciendo un ejercicio en particular. (Ahora que me lo decis, es verdad que suena mucho mas logico tener la responsabilidad en el objeto del producto y en este caso modelar ademas el iva dentro del pais) |
Beta Was this translation helpful? Give feedback.
Muchas graciaaas! Nono la verdad que me surgio la duda y quise poner un ejemplo para preguntar, no estaba haciendo un ejercicio en particular. (Ahora que me lo decis, es verdad que suena mucho mas logico tener la responsabilidad en el objeto del producto y en este caso modelar ademas el iva dentro del pais)
Pero me re sirve lo q me dijiste de cada opcion para comparar y tener q decidir depende el caso! Con la forma de la variable de instancia tengo q cambiarlas en todos lados o aprovechar que pueden ser diferentes, la variable de clase buenisimo q sea una opcion pero a tener cuidado, los singleton hay q tener mucho cuidado y ños enums son una herramienta re util al parecer, mas al poder o…