Patrones de diseño por tutoriales: el poder de OOP (parte 1)

Patrón de construcción: facetado y fluido

Actualizado el 2 de octubre de 2019, 02:10 AM GMT 5: 30+
¡Muchas gracias a Uran por esta gran ilustración!

Requisitos previos: esta serie de blogs requiere un nivel intermedio de experiencia en programación orientada a objetos. Debe tener conocimientos básicos sobre clase, objeto, constructor, herencia, valor y tipo de referencia. Un intermediario obtendrá conocimiento y los expertos agudizarán su conocimiento al leer esta serie de principio a fin.

Los patrones de diseño se utilizan para representar las mejores prácticas adoptadas por la comunidad de desarrolladores de software orientados a objetos con experiencia.

El patrón de diseño del constructor nos ayuda a construir un objeto de una manera más simple y legible. El patrón de diseño del constructor sigue dos reglas simples como se menciona a continuación.

  1. Separe la representación de clase original y sus métodos de construcción.
  2. devuelve la instancia de la clase en el paso final

El mejor ejemplo de un patrón de diseño de constructor es SwiftUI, sí, has leído bien. SwiftUI utiliza un patrón de diseño de constructor para la mayoría de sus clases, p. Texto, imagen

Problema:

Piense en la clase, diga Persona que tiene diez o más propiedades, imaginando su diseño de constructor cuando necesita crear una instancia de la clase Persona. Su constructor tomará diez o más argumentos, será difícil administrar estos muchos argumentos como una sola función o constructor y, con el tiempo, perderá la legibilidad del código. Mira el siguiente ejemplo.

Intente ejecutar el ejemplo anterior en el patio de recreo, se ejecutará con éxito y le dará un resultado esperado. Lógicamente es correcto.

Podemos mejorar el ejemplo anterior, superando los siguientes puntos.

  1. Tenemos que pasar los valores en el orden mencionado, no podemos reordenar la secuencia de parámetros para mejorar la legibilidad.
  2. Tenemos que pasar todos los valores, incluso si no conocemos algunos valores en el momento de la creación del objeto.

P.ej. Supongamos que necesita crear un objeto de la clase Persona, pero la persona aún está buscando trabajo. Cuando esa persona se una a cualquier compañía, solo tendremos detalles de los trabajos.

Solución:

  1. Crear grupos lógicos de propiedades relacionadas.
  2. Cree clases de constructor separadas para diferentes grupos de propiedades [ayuda en la normalización de propiedades, esto es opcional].
  3. Recupere una instancia en el paso final.

Simplifiquemos esto con un ejemplo,
Ya tenemos una clase llamada Persona, por ejemplo, Sin diseñoPatternExample1.swift, en la que tenemos 14 propiedades. Si verificamos detenidamente todas las 14 propiedades, las propiedades tienen 4 grupos lógicos.

  1. Datos personales propiedades
  2. Datos de contacto propiedades
  3. Dirección detalles propiedades
  4. Detalles de la empresa propiedades

El patrón de diseño facetado y fluido juntos nos ayuda a superar los dos problemas mencionados anteriormente.

En el ejemplo anterior, hemos separado las responsabilidades de la clase Persona en diferentes clases. La clase de persona ahora solo contiene las propiedades de los datos, mientras que hemos creado las múltiples clases de constructores que tienen la responsabilidad de construir / actualizar el grupo relativo de propiedades.

Tenemos una clase de constructor base PersonBuilder y tenemos otras cuatro clases de constructor derivadas llamadas PersonPersonalDetailsBuilder, PersonContactDetailsBuilder, PersonAddressDetailsBuilder y PersonCompanyDetailsBuilder.

La clase base PersonBuilder nos ayuda a cambiar entre múltiples constructores en cualquier momento, mientras que otros cuatro constructores derivados de PersonBuilder tienen la responsabilidad de actualizar las propiedades relativas.

En el ejemplo anterior, podemos ver claramente que la construcción de un objeto Person es más legible en comparación con nuestro primer ejemplo SinDesignPatternExample1.swift también podemos actualizar el grupo de propiedades o cualquier propiedad individual en cualquier momento de una manera más legible.

En el ejemplo anterior, tenga en cuenta que estamos devolviendo la instancia del generador por sí misma después de llamar a todos los métodos de actualización de propiedades. Lo que nos ayuda a escribir el encadenamiento de múltiples métodos del mismo generador en lugar de escribir varias líneas por separado. Este concepto se conoce como patrón fluido.

Beneficios:

  1. Fácil inicializar un objeto de una clase que tiene demasiadas propiedades de una manera más legible.
  2. Sigue el principio de responsabilidad única.
  3. Inicialice el objeto o actualice las propiedades en cualquier orden según su conveniencia.

Prima:

Para que el patrón de construcción sea coherente en todo el proyecto, puede crear el protocolo como se muestra a continuación.

¿Te gustó este artículo?
Aplauda y muestre su apoyo.
No te cuesta nada aplaudir.

A dónde ir desde aquí?

Leer más blogs de mi página de índice

Encuentra mis repositorios en Github
Sigueme en Twitter