Enquanto me educava sobre arquitetura de software e padrões de design, observei que na maioria dos casos alguns recursos de linguagem e detalhes de design estão implícitos na explicação.
Por exemplo, praticamente qualquer artigo ou livro que ilustre as idéias usando classes e interfaces. Tudo o que se pode encontrar facilmente neste tópico mencionaria objetos e conceitos de POO.
E se a linguagem em que o sistema está escrito não tiver tais conceitos? Por exemplo, e se eu usar Python ou Node, que são digitados dinamicamente e não têm noção de interface? E se eu usar o TypeScript onde uma interface é uma construção efêmera, que não existe no tempo de execução? E se eu estiver tentando adotar a programação funcional? Devo ignorar, por exemplo, o SOLID e procurar outros conceitos, adequados ao meu idioma?
Se sim, quais são esses? Infelizmente, todos os paradigmas bem adotados (até onde sei) se referem aos conceitos e tipos de POO de alguma maneira. Se não, quais regras devo seguir ao adaptar os princípios gerais de arquitetura e design ao meu idioma e caso de uso específicos?
Como você descreveria em geral a dependência entre arquitetura e linguagem?
fonte
Respostas:
Uma arquitetura de software é muito parecida com a arquitetura de uma casa ou uma ponte. Uma ponte deve suportar o peso de si mesma e dos veículos que passam por ela ou das pessoas que passam por ela. Deve suportar o tempo. Os materiais que você usa para construí-lo devem ser fortes e relativamente leves.
Existem muitos materiais que você pode usar para construir uma casa. Você pode usar tijolo ou estuque. Você pode usar vigas de madeira ou de metal. Cada material tem suas próprias características, em termos de peso, resistência e assim por diante. Todas essas características afetam a arquitetura.
Da mesma forma, a linguagem de programação usada afeta a maneira como você constrói sua arquitetura. Sua arquitetura terá uma aparência diferente em uma linguagem de programação que possui classes como C ++ do que em uma linguagem de programação que não possui, como C.
Os princípios do SOLID são principalmente sobre linguagens orientadas a objetos (ou seja, linguagens com classes).
fonte
A arquitetura depende dos recursos para atingir seus objetivos. As opções de idioma podem limitar os recursos. Qualquer linguagem completa do Turing tem a capacidade de concluir qualquer tarefa de programação. Após esse ponto, é sobre o quão legível por humanos a linguagem permite que a solução seja.
Muitos esquemas de arquitetura de software solicitam que você remova todo o conhecimento das opções de tecnologia das regras de negócios do domínio principal. A única opção técnica na qual você nunca pode remover o conhecimento do núcleo é o idioma em que você escolhe expressá-lo.
Quando os livros sobre Arquitetura se concentram em falar sobre seus objetivos, o idioma não importa, desde que seja capaz de atingir o objetivo. Quando os livros lhe dizem como atingir esses objetivos, o idioma começa a se deteriorar.
fonte
A arquitetura como um termo tem um significado realmente específico que está muito relacionado à arquitetura no mundo físico e, em sua essência, é sobre a arte e a prática de construir coisas, sobre como as coisas são feitas e montadas. Assim, quando a arquitetura é bem feita, acho que a linguagem está muito ligada à arquitetura, assim como um edifício bem arquitetado deve ser intimamente informado pelo material com o qual é construído.
No software, as escolhas arquiteturais devem ser feitas de maneira congruente com as propriedades da linguagem. Se você estiver construindo um sistema com uma linguagem orientada a objetos, esperaria que a arquitetura do sistema também fosse orientada a objetos. Se você está construindo um sistema com uma linguagem funcional, espero que a arquitetura desse sistema também seja funcional.
Faz sentido?
fonte
Eu diria, para começar, que mesmo a linguagem em que você pensa tem uma influência profunda no que você pode conceber. Há uma razão pela qual o PASCAL foi criado por Niklaus Wirth e C por Brian Kernighan e Dennis Ritchie.
Em um nível superior, a capacidade de expressar certos conceitos (e a falta de outros) direcionará seu pensamento e fará com que você chegue a certas soluções que não seriam necessariamente a mesma pessoa, com um plano de fundo diferente.
Finalmente, os conceitos mencionados podem ser implementados em qualquer linguagem de uso geral. Só que eles podem não ter suporte sintático e a implementação pode ser complicada. Você pode escrever um código de montagem x86 orientado a objetos se estiver suficientemente comprometido (ou insano o suficiente) da mesma maneira que faria com C. Na verdade, as primeiras implementações do C ++ foram pré-processadores que compilaram seu código C ++ em C (e os nomes de símbolos confusos depurando muito mais divertido).
fonte