Pregunta

Estoy trabajando en una aplicación que está cerca de 250.000 líneas de código.En la actualidad soy el único desarrollador que trabaja en esta solicitud que fue construido originalmente en .NET 1.1.Omnipresente en todo es una clase que hereda de CollectionBase.Todas las colecciones de bases de datos heredar de esta clase.Estoy considerando la refactorización para heredar de la colección genérica de la Lista en su lugar.Sobra decir que Martin Fowler Refactorización libro no tiene sugerencias.Debo intentar este refactorizar?Si es así, ¿cuál es la mejor manera de abordar este refactorizar?

Y sí, hay pruebas de unidad en todo, pero ningún equipo de control de calidad.

¿Fue útil?

Solución

De 250.000 Líneas es mucho para refactorizar, además se debe tomar en cuenta varios de los siguientes:

  1. ¿Tienes un departamento de control de calidad que será capaz de QA la refactorizado el código?
  2. ¿Tiene usted pruebas de unidad para que el viejo código?
  3. Hay un intervalo de tiempo de todo el proyecto, es decir,se que el mantenimiento del código a los usuarios la búsqueda de errores?

si respondió 1 y 2 no, me gustaría, en primer lugar y ante todo, escribir pruebas unitarias para el código existente.Hacen extensas y exhaustivas.Una vez que los tengas en el lugar, una rama de una versión, y el inicio de refactorización.La unidad de pruebas debe ser capaz de ayudarle a refactorizar en los genéricos correctamente.

Si 2 es sí, entonces acaba de rama y de inicio de refactorización, apoyándose en los tests de unidad.

Un departamento de control de calidad ayudaría mucho, ya que usted puede ámbito de ellos el nuevo código para la prueba.

Y por último, si los clientes/usuarios que necesitan errores corregidos, arreglar primero.

Otros consejos

No.A menos que usted realmente tiene una buena justificación para poner a su base de código a través de este ejercicio.¿Qué es el ahorro de costes o ingresos generados por su refactorizar?Si yo fuera su manager, probablemente voy a aconsejar en contra de ella.Lo siento.

Cómo expuesto es CollectionBase de la clase heredada?
Hay cosas a las que los Genéricos podría hacer mejor que CollectionBase?

Me refiero a que esta clase es muy utilizado, pero es sólo una clase.La clave para la refactorización no es preocupante el programa del status quo.La clase debe mantener siempre su contrato con el mundo exterior.Si usted puede hacer esto, no es un cuarto de millón de líneas de código que son de refactorización, pero tal vez sólo 2500 (estimación aleatoria, no tengo idea de lo grande que esta clase es).

Pero si hay una gran cantidad de exposición a partir de esta clase, usted puede tener a la vez tratar de que la exposición como el contrato y probar y factor de la exposición.

Si son va a ir a través con él, no lo uso Lista< T >.En su lugar, utilice Sistema.Las colecciones.ObjectModel.Colección< T >, que es más de un sucesor espiritual de CollectionBase.

El Collection<T> la clase proporciona protegido métodos que se pueden utilizar para personalizar su comportamiento cuando la adición y eliminación de elementos, limpieza de la colección, o establecer el valor de un elemento existente.Si usted utiliza List<T> no hay manera de reemplazar el Add() método para manejar cuando alguien anuncios para la colección.

Creo que la refactorización y mantener su código hasta la fecha es un proceso muy importante para evitar la corrupción de código/olor.Un montón de desarrolladores que sufren de estar casado con su código o simplemente no la suficiente confianza en sus pruebas de unidad para ser capaz de extraer cosas aparte y limpiarlo y hacerlo bien.

Si usted no toma el tiempo para limpiar y hacer que el código sea mejor, te arrepentirás en el largo plazo, porque usted tiene que mantener ese código por muchos años, o de quien toma el código va a odiar.Dijo que tiene pruebas de unidad y usted debería ser capaz de confiar en esas pruebas para asegurarse de que cuando usted refactorizar el código aún funciona.

Por lo que dicen que hacen, limpiar, hacer que sea hermoso.Si usted no está seguro de que su unidad de pruebas puede manejar el refactorizar, escribir un poco más.

Estoy de acuerdo con Thomas.

Siento la pregunta que usted debe preguntarse siempre cuando la refactorización es "¿Qué gano haciendo esto vs hacer algo más con mi tiempo?" La respuesta puede ser muchas cosas, desde el aumento de la capacidad de mantenimiento para un mejor rendimiento, pero siempre a expensas de algo más.

Sin ver el código es difícil para mí decirlo, pero esto suena como una situación muy mala para ser de refactorización en.Las pruebas son buenas, pero no es infalible.Todo lo que toma es para que uno de ellos tiene una mala suposición, y su refactorizar podría introducir un error desagradable.Y sin control de calidad para cogerlo, eso no sería bueno.

Yo también soy personalmente un poco recelosos de enorme refactors como este.Me costó un trabajo de una vez.Fue mi primer trabajo fuera del gobierno (que tiende a ser un poco más indulgente, una vez que obtenga la tenencia de la tierra' es muy duro para conseguir despedido) y yo era el único en la web del programador.Tengo un legado ASP app que estaba mal escrito cayó en mi regazo.Mi primera prioridad era conseguir la maldita cosa refactorizar en algo menos...espeluznante.Mi empleador quería que los incendios poner y nada más.Seis meses más tarde, yo estaba buscando trabajo de nuevo :p Moraleja de esta historia:Consulte con su administrador de primero antes de embarcarse en esto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top