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?