2010-11-16 11 views
13

Por lo tanto,Variables de instancia vs. paso de parámetros? ¿Hay un argumento?

He estado trabajando en volver a factorizar algún código heredado recientemente y me he cuestionado la validez de algunas de las decisiones de factorización que he estado tomando. Una de esas consultas ha sido sobre el uso de variables de instancia para compartir objetos entre métodos dentro de un objeto.

Específicamente, hay una serie de lugares donde los métodos de constructores & se han dividido y las variables locales se han promocionado a variables de instancia, lo que permite el acceso desde los métodos ahora separados. Esto, para mí, parece equivocado. Rompe la encapsulación, altera el alcance y puede afectar el ciclo de vida, sin embargo, algunas de estas clases están relacionadas con el rendimiento y, por lo tanto, me pregunto ¿cuál podría ser la implicación de volver a factorizar estos métodos para usar el paso de parámetros?

Más al punto me pregunto si mis suposiciones incluso tienen agua? ¿El paso de parámetros de los objetos es preferible a las variables de instancia cuando se trata de compartir entre métodos privados?

Respuesta

8

En el sitio plus de esta manera no tendrá que pasar esos argumentos a otros métodos. Cuando un método tiene más de tres argumentos (según Robert Martin's Clean Code), la legibilidad de su código comienza a disminuir rápidamente. Creo que deberías mezclar estos dos métodos para apostar el mejor resultado.

Lo que podría hacer es buscar si puede extraer una nueva clase de parte de la existente. Cuando solo parte de los métodos usan estos campos de instancia, quizás esos métodos estén haciendo algo que pueda abstraerse. De esta forma, puede crear una nueva clase con los campos de instancia como argumentos o propiedades de constructor e instanciarla.

7

Definitivamente creo que no deberías tomar las variables locales y convertirlas en variables de instancia solo para evitar pasarlas por. Definitivamente no es una buena idea por razones que ya ha enumerado, incluido el hecho de que aumenta la clase en sí.

Si lo que representa esa variable de instancia es una propiedad de esa clase o no, no es algo que pueda abordarse genéricamente. Dependería de la entidad que la clase representa. Sin embargo, este diseño está relacionado con el diseño de la clase en sí y tal vez es el diseño de clase general que debe revisarse.

Si tal vez usted proporciona un ejemplo de la refactorización que se refiere, que podría ayudar a proporcionar una mejor respuesta en ese contexto

+0

1, de hecho lo hace sonar como olor código. –

Cuestiones relacionadas