.NET: Modificar nombre de métodos existentes

No se me ocurrió un nombre que describiera mejor lo que explico en este post. Aquí hablo de cómo cambiar el nombre de un método de manera segura, sin afectar lo que ya está desarrollado en la aplicación, y aprovechando algunas características del .NET Framework.

A veces, principalmente durante la fase de mantenimiento de código, surgen casos en los que se requiere cambiar el nombre de un método.

Esto puede ser porque el nombre anterior no refleje tan claramente lo que el método realiza. Por ejemplo, cuando tenemos un método Guardar en una clase y después de cierto tiempo (y muchas líneas de código) tenemos que agregar otos métodos que también guardan información. El decir que un método «guarda» ahora resulta ambiguo, y dicho método deberá tener un nombre más específico.

Otro caso que podría presentarse es que el programador anterior haya escrito mal un nombre. Una vez encontré un método llamado IniciarCecion y me quería dar un ataque D: Pero esto ya es más una cuestión moral, si lo quieren ver así.

Visual Studio tiene una herramienta Refractor, que nos facilita cambiar el nombre de un método/clase/variable/etc. y que se modifique en todas las partes del código donde se esté utilizando. Pero hay casos especiales donde no se realiza este cambio, como puede ser cuando usamos código de servidor dentro de una página web.

Otra situación que se puede presentar es cuando estamos trabajando en una biblioteca de clases. Los proyectos que utilicen dicha biblioteca no considerarán el cambio en el método, y por una actualización del código sufriremos momentos incómodos con el equipo de trabajo.

Así que el refractor no es siempre la solución. Afortunadamente, hay una forma muy sencilla de cambiar el nombre de un método sin correr riesgos por el que ya está siendo utilizado.

Si tenemos este ejemplo como ya lo había mencionado:

public void Guardar(int valor) {
  using (SqlConnection connection = CrearConexion()) {
    // código para guardar en BD
  }
}

Simplemente tenemos que hacer esto:

public void Guardar(int valor) {
  GuardarEntero(valor);
}
public void GuardarEntero(int valor) {
  using (SqlConnection connection = CrearConexion()) {
    // código para guardar en BD
  }
}

Así de sencillo. Lo único que hicimos fue crear un segundo método, el cual contendrá el código y será el que reciba mantenimiento de ahora en adelante, y el método anterior, que se ha venido utilizando, únicamente redirecciona al método nuevo.

Ya no importará si se sigue usando el método anterior, pues la operación realizada será a fin de cuentas la misma.

Ahora bien, obviamente lo mejor es que donde se utilice esta clase use el método nuevo. Si llegara el momento en que el método anterior no se usara para nada, sería mucho mejor. Y bien sabemos que mandarle un correo a los programadores para que actualicen el código no es garantía, así que lo mejor será decirles desde el mismo código que el método anterior ya no se debe usar. ¿Cómo? Declarándolo obsoleto.

[Obsolete("Use el método 'GuardarEntero' en lugar de éste")]
[EditorBrowsable(EditorBrowsableState.Never)]
public void Guardar(int valor) {
  GuardarEntero(valor);
}
public void GuardarEntero(int valor) {
  using (SqlConnection connection = CrearConexion()) {
    // código para guardar en BD
  }
}

El atributo ObsoleteAttribute arrojará una advertencia cuando el método sea utilizado en alguna parte del código, avisando la necesidad de utilizar otro método sin evitar la compilación del proyecto. Si queremos que el uso del método genere un error de compilación, agregamos un segundo parámetro a este atributo con valor true.

Advertencia por método obsoleto

El atributo EditorBrowsableAttribute nos permite decidir si un elemento de una clase será visible en el Intellisense de Visual Studio. En el ejemplo estamos indicando que el método Guardar se ocultará en la ayuda de Visual Studio, para que en las futuras implementaciones de la clase no le aparezca como opción al desarrollador. Sí puede usarse conociendo el nombre del método, con su correspondiente advertencia, pero no será visible.

Cabe aclarar que el EditorBrowsableState no actúa dentro de la misma solución a la que pertenece la clase, aunque sea en proyectos distintos. Esto debido a que si estamos en la misma solución, se da por entendido que tenemos libre acceso a todo el código, sin limitantes. Únicamente se ocultará el método en proyectos fuera de la solución actual.

Anuncio publicitario

2 comentarios sobre “.NET: Modificar nombre de métodos existentes

Deja una respuesta

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s