¿Cuál es la diferencia entre patrones de diseño y patrones arquitectónicos?

119

Cuando leemos sobre patrones de diseño en Internet, notamos que hay 3 categorías:

  • Creacional
  • Estructural
  • Conductual

Pero cuando creamos la arquitectura de un software, pensamos en MVP, MVC o MVVM.

Por ejemplo, entre los patrones de creación encontré el patrón singleton , pero también he usado singleton en mi MPV.

Entonces, mi pregunta es: ¿Es un patrón de diseño una estructura general de un producto?

  • Si es así, ¿cómo singleton puede ser un patrón de diseño? Porque puedo usarlo en cualquier lugar de mi aplicación. Básicamente, está restringido solo a crear una instancia a la vez en la memoria, pero ¿no define este concepto cómo se diseña el software?

  • Si no es así, ¿dónde están MVP, MVC y MVVM en las tres categorías de patrones? ¿Y cuál es la diferencia entre diseño y arquitectura de software?

Jeevan Bhatt
fuente
Ya discutido: stackoverflow.com/a/46419722/3649347
Dime cómo
2
Consulte esta lista de recursos de patrones de diseño y patrones arquitectónicos github.com/DovAmir/awesome-design-patterns
dov.amir

Respuestas:

174

Requiere una explicación detallada, pero intentaré esbozar las diferencias lo mejor que pueda.

Patrones son elementos comunes destilados que se encuentran en los programas. Nos permite deconstruir una gran estructura compleja y construir utilizando piezas simples. Proporciona una solución general para una clase de problemas.

Un gran software complejo pasa por una serie de deconstrucciones en diferentes niveles. A gran nivel, los patrones arquitectónicos son las herramientas. En un nivel más pequeño, los patrones de diseño son las herramientas y en el nivel de implementación, los paradigmas de programación son las herramientas.

Un patrón puede ocurrir en niveles muy diferentes. Ver fractales . La clasificación rápida y la clasificación por fusión son todos patrones algorítmicos para organizar un grupo de elementos en un orden.

Para una visión más simplista:

  • Paradigmas de programación : específicos del lenguaje de programación
  • Patrones de diseño : resuelve problemas recurrentes en la construcción de software
  • Patrones arquitectónicos : organización estructural fundamental para sistemas de software

Modismos son técnicas de programación específicas del paradigma y del lenguaje que completan detalles de bajo nivel.

Los patrones de diseño suelen estar asociados con elementos comunes a nivel de código. Proporciona varios esquemas para refinar y construir subsistemas más pequeños. Suele estar influenciado por el lenguaje de programación. Algunos patrones se vuelven insignificantes debido a los paradigmas del lenguaje . Los patrones de diseño son tácticas de mediana escala que desarrollan parte de la estructura y el comportamiento de las entidades y sus relaciones.

Mientras que los patrones arquitectónicos se consideran elementos comunes a un nivel más alto que los patrones de diseño. Los patrones arquitectónicos son estrategias de alto nivel que se refieren a componentes a gran escala, las propiedades globales y los mecanismos de un sistema.

¿Cómo se obtienen los patrones? Mediante:

  1. reutilizar,
  2. clasificación
  3. y finalmente abstracción para destilar lo común.

Si ha seguido los pensamientos expuestos anteriormente. Verá que Singleton es un "patrón de diseño" mientras que MVC es uno de los patrones "arquitectónicos" para lidiar con la separación de preocupaciones.

Intenta leer en:

  1. http://en.wikipedia.org/wiki/Architectural_pattern_(computer_science)
  2. http://en.wikipedia.org/wiki/Design_pattern
  3. http://en.wikipedia.org/wiki/Anti-pattern
pyfunc
fuente
14
Muy bien hecho y elaborado. Ahora solo deseaba que todos usaran los términos tan diferenciados como los pones aquí. ¿Puedo colocar una impresión de su respuesta en la pared sobre el dispensador de café de nuestro departamento de marketing? Quizás lo entiendan algún día. ;-)
ofi
@ofi: ¡Gracias! El uso de la construcción del lenguaje puede confundirnos y guiarnos. Esto es algo que encuentro bastante poderoso.
pyfunc
+3 por
salvarnos
Buena respuesta, gracias !! como dijo @ofi, lo imprimiré y lo fijaré en la pared del equipo de diseño.
rollo
11

Los patrones de diseño son patrones bien conocidos para resolver problemas técnicos de una manera que se ha probado muchas veces. Los patrones de diseño son estructuras y prácticas de diseño comunes que permiten crear software orientado a objetos reutilizable. Los ejemplos de patrones de diseño son Factory Pattern, Singleton, Facade, State, etc. Los patrones de diseño se pueden utilizar para resolver problemas más pequeños en toda la aplicación y son mucho más fáciles de inyectar, cambiar y agregar que la arquitectura general.

Los patrones de arquitectura son patrones bien conocidos para resolver problemas de arquitectura de aplicaciones de software. La arquitectura de la aplicación de software es el proceso de definir una solución estructurada que cumpla con todos los requisitos técnicos y operativos. La arquitectura de la aplicación es la "organización" general del código. Ejemplos de arquitecturas diferentes pueden ser MVC, MVVM, MVP, n-layer (es decir, UI-BLL-DAL), etc. La arquitectura normalmente debe decidirse por adelantado y, a menudo, es difícil de cambiar una vez que se crea la aplicación.

Pawan Kumar Tiwari
fuente
1

Los elementos arquitectónicos tienden hacia colecciones de clases o módulos, generalmente representados como cajas. Los diagramas sobre arquitectura representan el nivel más elevado mirando hacia abajo, mientras que los diagramas de clases están en el nivel más atómico. El propósito de los patrones de arquitectura es comprender cómo encajan las partes principales del sistema, cómo fluyen los mensajes y los datos a través del sistema y otras preocupaciones estructurales. Los patrones de arquitectura utilizan una variedad de tipos de componentes, cada uno de los cuales se compone típicamente de módulos sucesivamente más pequeños. Cada componente tiene una responsabilidad dentro de la arquitectura. Los patrones de diseño son patrones de diseño de bajo nivel o nivel de clase para partículas más pequeñas de aplicaciones.

Para obtener más información: https://www.oreilly.com/ideas/contrasting-architecture-patterns-with-design-patterns

Araña Vishnu
fuente
0

Bueno, en su mayor parte es una cuestión de idioma. Según mi experiencia, la frontera entre diseño y arquitectura, en lo que al software se refiere, es un río ancho cuyo ancho es resultado del nivel del agua, que a su vez está influenciado principalmente por las temporadas de marketing. Generalmente, el término "diseño" se usa con un aspecto fuerte del comportamiento del producto de software reconocido por los usuarios finales, mientras que "arquitectura" representa la estructura técnica de un software, es decir, los componentes, bibliotecas, protocolos y todo lo que necesita para cumplir con los requisitos. diseño. Los "patrones de diseño" asumen dos funciones: primero, se consideran las mejores prácticas para resolver una categoría de problemas estándar (más o menos), no productos; 2º ayudan a los desarrolladores a comunicarse. Siguiendo con tu ejemplo de Singleton, nos permite saber de qué se trata la mecánica simplemente usando la palabra, en lugar de explicar cada vez, que creamos una instancia única usando un espacio de datos designado (variable o lo que sea) que se establece de manera controlada y se garantiza que será el único, porque protegemos al constructor de la clase, etc. Entonces, en mi humilde opinión, la respuesta corta a tu pregunta es: Depende de quién esté hablando. ¿Eso tiene algún sentido?

ofi
fuente
0

Los patrones de diseño se diferencian de los patrones arquitectónicos en su alcance, están más localizados, tienen menos impacto en la base del código, impactan en una sección específica de la base del código, por ejemplo:

How to instantiate an object when we only know what type needs to be instantiated at run time (maybe a Factory Class?)
How to make an object behave differently according to its state (maybe a state machine, or a Strategy Pattern?)

Los patrones arquitectónicos tienen un gran impacto en la base del código, con mayor frecuencia afectando a toda la aplicación, ya sea horizontalmente (es decir, cómo estructurar el código dentro de una capa) o verticalmente (es decir, cómo se procesa una solicitud desde las capas externas a las capas internas y espalda). Ejemplos de patrones arquitectónicos: modelo-vista-controlador, modelo-vista-modelo de vista

Isuru vindula
fuente