Muchos profesionales del software piensan que los estilos y patrones arquitectónicos son los mismos. Lamentablemente, algunos de los desarrolladores de software no entienden la diferencia entre patrones arquitectónicos y patrones de diseño. En este artículo, vamos a resumir las diferencias entre ellos.
Según MSDN, los estilos y patrones arquitectónicos son lo mismo. Pero, ¿cómo puede ser? La palabra estilo significa: “una manera de hacer algo” mientras que un patrón significa: “un diseño decorativo repetido” . Sin embargo, estas definiciones muestran dos cosas diferentes. En ingeniería de software, la terminología debe ser más clara y describir algo específico. Entonces, ¿cuál es la diferencia entre las terminologías y cómo podemos diferenciarlas?
Estilo arquitectónico
El estilo arquitectónico muestra cómo organizamos nuestro código o cómo se verá el sistema desde una vista de helicóptero de 10000 pies para mostrar el nivel más alto de abstracción del diseño de nuestro sistema. Además, cuando construimos el estilo arquitectónico de nuestro sistema, nos enfocamos en las capas y módulos y en cómo se comunican entre sí. Hay diferentes tipos de estilos arquitectónicos, y además, podemos mezclarlos y producir un estilo híbrido que consiste en una mezcla entre dos o incluso más estilos arquitectónicos. A continuación se muestra una lista de estilos arquitectónicos y ejemplos para cada categoría:
- Estilos arquitectónicos de estructura: como capas, tuberías y filtros y estilos basados en componentes.
- Estilos de mensajería: como invocación implícita, mensajería asíncrona y estilo de publicación-suscripción.
- Sistemas distribuidos: tales como estilo orientado a servicios, de igual a igual, agente de solicitud de objetos y estilos de computación en la nube.
- Estilos de memoria compartida: como estilos basados en funciones, de pizarra y centrados en bases de datos.
- Estilos de sistema adaptables: como estilo microkernel, reflexión, estilos de lenguaje específicos del dominio.
Patrones Arquitectónicos
El patrón arquitectónico muestra cómo se puede utilizar una solución para resolver un problema recurrente. En otras palabras, refleja cómo un código o componentes interactúan entre sí. Además, el patrón arquitectónico describe el estilo arquitectónico de nuestro sistema y proporciona soluciones para los problemas de nuestro estilo arquitectónico. Personalmente, prefiero definir patrones arquitectónicos como una forma de implementar nuestro estilo arquitectónico. Por ejemplo: ¿cómo separar la interfaz de usuario del módulo de datos en nuestro estilo arquitectónico? ¿Cómo integrar un componente de terceros con nuestro sistema? ¿Cuántas llantas tendremos en nuestra arquitectura cliente-servidor? Ejemplos de patrones arquitectónicos son microservicios, bus de mensajes, solicitante/consumidor de servicios, MVC, MVVM, microkernel, n niveles, diseño basado en dominios y control de abstracción de presentación.
Patrones de diseño
Los patrones de diseño son mejores prácticas acumulativas y experiencias que los profesionales de software utilizaron a lo largo de los años para resolver el problema general por ensayo y error que enfrentaron durante el desarrollo de software. The Gang of Four (GOF, se refiere a Eric Gamma, Richard Helm, Ralf Johnson y John Vlissides) escribió un libro en 1994 titulado «Patrón de diseño: elementos de software orientado a objetos reutilizable» en el que sugirieron que los patrones de diseño se basan en dos principios fundamentales del diseño orientado a objetos:
- Desarrolle para una interfaz, no para una implementación.
- Favorecer la composición de objetos sobre la herencia.
Además, presentaron que el conjunto de patrones de diseño contiene 23 patrones y se clasifican en tres conjuntos principales:
1. Patrones de diseño creacional:
Proporcione una forma de crear objetos mientras oculta la lógica de creación. Por lo tanto, la creación de objetos debe realizarse sin crear instancias de objetos directamente con la palabra clave «Nuevo» para brindar la flexibilidad de decidir qué objetos deben crearse para un caso de uso determinado. Los patrones de diseño creacional son:
- Patrón de fábrica abstracto: proporciona una interfaz para crear objetos sin especificar las clases.
- Patrón Singleton: proporcione solo una única instancia de las llamadas y acceso global a esta instancia.
- Patrón constructor: separa la construcción de la representación y permite que la misma construcción cree múltiples representaciones.
- Patrón de prototipo: creación de duplicados sin afectar el rendimiento y la memoria. Entonces, el objeto duplicado se construye a partir del esqueleto de un objeto existente.
2. Patrones estructurales:
Preocupado por la composición de clases y objetos. Los patrones de diseño estructural son:
- Patrón adaptador: funciona como puente entre dos interfaces incompatibles y combina sus capacidades.
- Patrón de puente: proporciona una forma de desacoplar la abstracción de su implementación.
- Patrón de filtro: también conocido como patrón de criterios, proporciona una forma de filtrar un conjunto de objetos utilizando diferentes criterios y encadenándolos de forma desacoplada a través de operaciones lógicas.
- Patrón compuesto: proporciona una forma de tratar un grupo de objetos de forma similar a un solo objeto. Compone objetos en términos de una estructura de árbol para representar tanto una parte como una jerarquía completa.
- Patrón decorador: permite agregar nueva funcionalidad a un objeto existente sin alterar su estructura.
- Patrón de fachada: proporciona una interfaz unificada a un conjunto de interfaces. Oculta las complejidades del sistema y proporciona una interfaz al cliente a través de la cual el cliente puede acceder al sistema.
- Patrón de peso ligero: reduzca la cantidad de objetos creados y para disminuir la huella de memoria y aumentar el rendimiento. Ayuda a reutilizar objetos de tipo similar ya existentes almacenándolos y crea un nuevo objeto cuando no se encuentra ningún objeto coincidente.
- Patrón de proxy: proporciona un marcador de posición a otro objeto para controlar el acceso a él. El objeto tiene un objeto original para interconectar su funcionalidad con el mundo exterior.
3. Patrones de comportamiento:
Los patrones de comportamiento están relacionados con las comunicaciones entre objetos. La siguiente es la lista de patrones de comportamiento:
- Patrón de responsabilidad: crea una string de objetos receptores para una solicitud. Este patrón desacopla al remitente y al receptor de una solicitud según el tipo de solicitud.
- Patrón de comando: es un patrón basado en datos en el que una solicitud se envuelve bajo un objeto como comando y se pasa a un objeto invocador.
- Patrón de intérprete: proporciona una forma de evaluar la gramática o la expresión del lenguaje. Se trata de implementar una interfaz de expresión que le dice a interpretar un contexto particular. Este patrón se utiliza en el análisis de SQL, el motor de procesamiento de símbolos, etc.
- Patrón de iterador: proporciona una forma de acceder a los elementos de un objeto de colección de forma secuencial sin necesidad de conocer su representación subyacente.
- Patrón de mediador: se utiliza para reducir la complejidad de la comunicación entre varios objetos o clases. Proporciona una clase de mediador que normalmente maneja todas las comunicaciones entre diferentes clases y admite un fácil mantenimiento del código mediante acoplamiento flexible.
- Patrón Memento: se utiliza para restaurar el estado de un objeto a un estado anterior.
- Patrón de observador: se utiliza cuando existe una relación de uno a muchos entre objetos, por ejemplo, si se modifica un objeto, sus objetos dependientes se notificarán automáticamente.
- Patrón de estado: se utiliza para cambiar el comportamiento de la clase en función de su estado.
- Patrón de objeto nulo: ayuda a evitar referencias nulas al tener un objeto predeterminado.
- Patrón de estrategia: proporciona una forma de cambiar el comportamiento de la clase o su algoritmo en tiempo de ejecución.
- Patrón de plantilla: una clase abstracta expone formas/plantillas definidas para ejecutar sus métodos. Sus subclases pueden anular la implementación del método según sea necesario, pero la invocación debe ser de la misma manera definida por una clase abstracta.
- Patrón de visitante: se utiliza para cambiar el algoritmo de ejecución de una clase de elemento.
Hay dos subconjuntos más de patrón de diseño que se pueden agregar a las 3 categorías de patrón de diseño:
- Patrones J2EE: los patrones están relacionados específicamente con el nivel de presentación. Estos patrones son identificados por Sun Java Center.
- Patrones de concurrencia: tales como: patrones de bloqueo, unión, bloqueo y grupo de subprocesos
La línea de fondo:
El estilo arquitectónico es una vista de 10000 helicópteros del sistema. Muestra el diseño del sistema al más alto nivel de abstracción. También muestra el módulo de alto nivel de la aplicación y cómo interactúan estos módulos. Por otro lado, los patrones arquitectónicos tienen un gran impacto en la implementación del sistema tanto horizontal como verticalmente. Finalmente, los patrones de diseño se utilizan para resolver problemas localizados durante la implementación del software. Además, tiene un impacto menor en el código que los patrones arquitectónicos, ya que el patrón de diseño se ocupa más de una parte específica de la implementación del código, como la inicialización de objetos y la comunicación entre objetos.
Publicación traducida automáticamente
Artículo escrito por malayasreh y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA