Mientras me educaba sobre la arquitectura del software y los patrones de diseño, noté que en la mayoría de los casos algunas características del lenguaje y detalles del diseño están implícitos en la explicación.
Por ejemplo, prácticamente cualquier artículo o libro que ilustre las ideas usando clases e interfaces. Todo lo que uno puede encontrar fácilmente sobre este tema mencionaría objetos y conceptos de POO.
¿Qué pasa si el lenguaje en el que está escrito el sistema no tiene tales conceptos? Por ejemplo, ¿qué sucede si uso Python o Node, que se escriben dinámicamente y no tienen una noción de interfaz? ¿Qué sucede si uso TypeScript donde una interfaz es una construcción efímera, que no existe en tiempo de ejecución? ¿Qué pasa si estoy tratando de adoptar la programación funcional? ¿Debo ignorar, por ejemplo, SOLID y buscar otros conceptos, adecuados para mi idioma?
Si es así, ¿cuáles son esos? Desafortunadamente, todos los paradigmas bien adoptados (hasta donde yo sé) se refieren a conceptos y tipos de OOP de alguna manera. En caso negativo, ¿qué reglas debo seguir al adaptar la arquitectura general y los principios de diseño a mi lenguaje particular y caso de uso?
¿Cómo describirías en general la dependencia entre la arquitectura y el lenguaje?
fuente
Respuestas:
Una arquitectura de software es muy parecida a la arquitectura de una casa o un puente. Un puente debe soportar el peso de sí mismo y de los vehículos que lo atraviesan o de las personas que lo cruzan. Debe soportar el clima. Los materiales que usa para construirlo deben ser fuertes y relativamente livianos.
Hay muchos materiales que puede usar para construir una casa. Puedes usar ladrillo o estuco. Puedes usar vigas de madera o de metal. Cada material tiene sus propias características, en términos de peso, resistencia, etc. Todas estas características afectan la arquitectura.
De la misma manera, el lenguaje de programación que usa afecta la forma en que construye su arquitectura. Su arquitectura se verá diferente en un lenguaje de programación que tenga clases como C ++ que en un lenguaje de programación que no lo tenga, como C.
Los principios SOLID se refieren principalmente a lenguajes orientados a objetos (es decir, lenguajes que tienen clases).
fuente
La arquitectura depende de las capacidades para cumplir sus objetivos. Las opciones de idioma pueden limitar las capacidades. Cualquier lenguaje completo de Turing tiene la capacidad de completar cualquier tarea de programación. Después de ese punto, se trata de cuán legible para el ser humano el lenguaje permite que la solución sea.
Muchos esquemas de arquitectura de software le piden que elimine todo el conocimiento de las opciones tecnológicas de las reglas comerciales del dominio central. La única opción técnica de la que nunca puede eliminar el conocimiento del núcleo es el idioma en el que elige expresarlo.
Cuando los libros de Arquitectura se limitan a contarte sobre sus objetivos, el idioma no importa siempre que sea capaz de lograrlo. Cuando los libros le dicen cómo lograr estos objetivos, el lenguaje comienza a ser importante.
fuente
La arquitectura como término tiene un significado realmente específico que está muy relacionado con la arquitectura en el mundo físico y, en esencia, se trata del arte y la práctica de construir cosas, de cómo se hacen y unen las cosas. Tomado de esa manera, cuando la arquitectura se hace bien, creo que el lenguaje está muy relacionado con la arquitectura, así como un edificio bien diseñado debe estar íntimamente informado por el material con el que está construido.
En software, las elecciones arquitectónicas deben hacerse de una manera que sea congruente con las propiedades del lenguaje. Si está creando un sistema con un lenguaje orientado a objetos, entonces esperaría que la arquitectura del sistema también esté orientada a objetos. Si está construyendo un sistema con un lenguaje funcional, entonces esperaría que la arquitectura de ese sistema también sea funcional.
¿Tener sentido?
fuente
Para empezar, diría que incluso el lenguaje en el que piensas tiene una profunda influencia en lo que puedes concebir. Hay una razón por la cual PASCAL fue creado por Niklaus Wirth y C por Brian Kernighan y Dennis Ritchie.
En un nivel superior, la capacidad de expresar ciertos conceptos (y la falta de otros) dirigirá su pensamiento y lo hará llegar a ciertas soluciones que no necesariamente serían la misma persona, con un fondo diferente.
Finalmente, los conceptos que menciona pueden implementarse en cualquier lenguaje de propósito general. Es solo que pueden no tener soporte sintáctico y la implementación puede ser engorrosa. Puede escribir código de ensamblaje x86 orientado a objetos si está lo suficientemente comprometido (o lo suficientemente loco) como podría hacerlo con C. De hecho, las primeras implementaciones de C ++ fueron preprocesadores que compilaron su código de C ++ en C (y los nombres de símbolos mutilados hechos depuración mucho más divertido).
fuente