Extraer una clase de datos privados

Extraer una clase de datos privados
Descrito en Patrones de diseño No

Resaltar una clase de datos privada (ing. Datos de clase privada ) es un patrón de diseño estructural que se utiliza para ocultar atributos y manipularlos.

Descripción

Por lo general , las clases siempre parecen inicialmente claras y comprensibles. Hacen su trabajo y no se suben a las responsabilidades de otras clases. Sin embargo, al desarrollar un programa, se agrega nueva lógica. Como resultado, algunas clases reciben por error muchas responsabilidades adicionales. Un método de refactorización privado viene al rescate , conocido como "Clase de extracción". Le permite cumplir con el " Principio de responsabilidad única ", lo que hace que las clases sean más confiables y resistentes a los cambios.

Ejemplos de implementación

Para aplicar este patrón de diseño a la clase deseada, debe:

  1. Cree una nueva clase que tendrá una responsabilidad utilizando los métodos de refactorización: extracción de campos y extracción de métodos.
  2. Cree un vínculo entre la clase antigua y la nueva.

Debe hacer cambios poco a poco y probar el resultado después de cada movimiento, esto le evitará tener que corregir una gran cantidad de errores al final. Al final, después de haber revisado las nuevas clases nuevamente, regrese a la clase anterior, tal vez su responsabilidad haya cambiado, y ahora tiene sentido llamarla de otra manera.

Ejemplo de implementación en C# espacio de nombres Private_class_data { class Program { static void Main ( string [] args ) { var radius = new double (); var color = nuevo color (); var origen = nuevoPunto ( ); var circle_before = nuevo antes . Círculo ( radio , color , origen ); var circle_after = nuevo después . Círculo ( radio , color , origen ); } } color de clase { } gráficos de clase { } punto de clase { } } espacio de nombres Private_class_data.before { class Circle { private double radius ; color de color privado ; punto de origen privado ; círculo público ( doble radio , color de color , punto de origen ) { este . radio = radio ; esto _ color = color ; esto _ origen = origen ; } public double Circunferencia { get { return 2 * Math . IP * esto . radio ; } } public double Diameter { get { return 2 * this . radio ; } } public void Dibujar ( Gráficos gráficos ) { //... } } } espacio de nombres Private_class_data.after { class CircleData { private double radius ; color de color privado ; punto de origen privado ; CircleData público ( doble radio , color de color , punto de origen ) { este . radio = radio ; esto _ color = color ; esto _ origen = origen ; } Radio doble público { obtener { devolver esto . radio ; } } public Color Color { get { return this . color ; } } Punto de origen público { get { return this . origen ; } } } círculo de clase { datos de círculo privado datos de círculo ; Public Circle ( radio doble , color de color , punto de origen ) { circleData = new CircleData ( radio , color , origen ); } public double Circunferencia { get { return 2 * Math . IP * esto . datoscirculo . radio ; } } public double Diameter { get { return 2 * this . datoscirculo . radio ; } } public void Dibujar ( Gráficos gráficos ) { //... } } }

Véase también

Literatura