Este documento presenta varias técnicas para refactorizar y mejorar el diseño de código. Brevemente describe técnicas como encapsular campos, reemplazar valores con objetos, cambiar asociaciones unidireccionales a bidireccionales, reemplazar números mágicos con constantes simbólicas y reemplazar subclases con campos. El objetivo general es mejorar la legibilidad, mantenibilidad y flexibilidad del código mediante pequeños cambios en su estructura y diseño.
2. Self Encapsulate Field (Autoencapsulacion)
Los Sets y Gets son la forma de acceder a atributos de una clase.
Generalmente, se usan con los atributos privados, ya que a los
públicos se puede acceder directamente sin tener que acudir a
ellos.
3.
4. Replace Data Value with Object
(Reemplazar el valor con objeto)
• A la hora de desarrollar se utilizan variables, que al
implementarlas parecen sencillas, por ejemplo: declarar un String
NombreEstudiante, este pareciera que no tuviera mas atributos,
pero cuando usted se pone analizar la variable NombreEstudiante
pueden tener mas de un atributo como: IDEstudiante, Edad,
Semestre, NumeroCursos, etc.
• De esta manera resulta mas conveniente convertir esos valores en
objetos.
5.
6. Change Value to Reference
(Cambiar valor a referencia)
• Se tienen muchas instancias de la misma clase de tal manera que
necesita ser reemplazado con un objeto.
• En varios sistemas los objetos pueden ser clasificados como
valores o referencias.
• Valores: en el mundo real corresponden a múltiples objetos en el
programa, por ejemplo: fechas, números telefónicos, colores,
direcciones.
• Referencias: en el mundo real corresponden a un solo objeto en el
programa, por ejemplo: una orden, un producto, un cliente.
7. Replace Array with Object
(Reemplazar un arrego con un objeto)
• Los arreglos son una excelente herramienta para almacenar datos
de un solo tipo, pero puede presentar el problema de que este
contenga varios tipos de datos, por ejemplo:
• La solución seria crear un objeto que separe los diferentes campos
por elemento
8. Duplicate Observed Data
(Datos duplicados observados)
• Cuando la GUI es responsable de los datos del dominio es una
buena idea separar los datos del problema en una clase aparte así
se podrán tener diferentes interfaces por ejemplo: de escritorio y
de móvil, sin tener ningún problema.
9.
10. Change Unidirectional Association to Bidirectional
(Cambiar asociación unidireccional a bidireccional).
• Por defecto las clases vienen con una asociación unidireccional,
sin embargo con el paso del tiempo estas necesitan acceder a las
características de una clase a otra.
11. Replace Magic Number with Symbolic
Constant.
• El código emplea cierto numero que es utilizado varias veces en el
programa por lo cual puede generar problemas, debido a esto es
conveniente convertir ese valor en una constante.
12. Encapsulate Collection
(Encapsulamiento de colecciones).
• En muchas ocasiones las clases contienen instancias de
colecciones, las cuales deben tener un protocolo ligeramente
distinto al de otros tipos de datos, estas no deben tener getters,
debido a que el cliente puede manipular los datos sin saber que
esta haciendo. Precisamente por esto las colecciones solo
deberían ser de lectura con métodos add/remove.
13. Replace Type Code with Subclasses
• Se tiene una clase con varios tipos de datos que afectan
directamente el comportamiento de esta, debido a esto se
crearan subclases por cada tipo de dato extrayendo los
comportamientos relevantes del código original.
• Todo el flujo del código se da a través del polimorfismo.
14.
15.
16. Replace Subclass with Fields (Reemplazar
las subclases por campos).
• Se tienen subclases que solo se diferencian en las variables
constantes que devuelven los métodos, la solución seria
reemplazar estas subclases por campos en la clase padre y
eliminar las subclases