Quanto a arquitetura de software depende do idioma?

14

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?

Tristan Tzara
fonte
Eu escrevi um artigo sobre arquitetura de software: Gerenciando a complexidade do software linkedin.com/pulse/...
overexchange
Em primeiro lugar, sim, a arquitetura de software é orientada com base na tecnologia que você tem em mente. Por exemplo: python não utiliza multithreading até que esses threads estejam vinculados à IO. Essa é uma limitação real na utilização de operações vinculadas à CPU com vários núcleos. Em segundo lugar, você deve ouvir isso ... youtu.be/FF-tKLISfPE Em terceiro lugar, você deve analisar / trabalhar em produtos corporativos distribuídos estáveis ​​existentes de domínio específico que são implantados em escala, por pelo menos 5-6 anos. Este é um entendimento orgânico de como a tecnologia influencia o design. Btw .. Esses produtos foram escritos no mundo pré-java, a partir do zero.
overexchange
Tecnologia Wrt ... No mundo Java, até o design da linguagem java 5/6/7 estava no controle dos fundadores reais. No java 8, eu consideraria o java como uma máquina de propaganda, mas não como uma linguagem de programação. Na minha opinião, o java se tornou a tecnologia de um gerente de projeto. Então, como um novato, eu analisaria / trabalho em um produto escrito usando C / C ++ / Python
overexchange
Por favor, não use a palavra arquitetura na sua pergunta, é confusa. Sua pergunta é sobre design. A escolha da linguagem normalmente qualificar como arquitetura, sua pergunta não faz sentido a forma como está redigido ..
Martin Maat
Também python e javascript não têm interfaces, eles simplesmente não usar uma palavra-chave separada para demarcá-las
Caleth

Respostas:

11

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).

Robert Harvey
fonte
4

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.

candied_orange
fonte
Pontos agradáveis ​​em sua resposta, mas tenho certeza, historicamente a arquitetura de software foi implementada com as TECNOLOGIAS em tendência.
overexchange
@overexchange O objetivo de uma boa arquitetura é produzir software que possa superar a tendência atual ao estar pronto para a próxima.
Candied_orange 13/0518
Pelo menos no mundo do middleware, as arquiteturas de produtos não conseguiram pensar além da RPC / RMI / CORBA até os anos 90. Vi projetos clássicos baseados em chamadas de remorso orientadas a procedimentos. Em seguida, o ServiceOArch mudou a tendência do middleware, em termos de arquitetura.
overexchange
2
@CandiedOrange essa é a teoria. Na prática, já vi muitas pessoas fazendo o que às vezes é chamado de "desenvolvimento orientado para o hype" - apenas faça o que seu círculo atual de colegas mais fala no momento do Design para que você possa participar dessa conversa.
Marstato 13/0518
@marstato Concordou. O melhor exemplo é, usando Spring / Springboot na tendência atual, para qualquer novo projeto, sem saber, por quê?
overexchange
1

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?

RibaldEddie
fonte
obrigado pela sua resposta! por acaso você conhece algum recurso, elaborando uma arquitetura de software com relação a linguagens dinamicamente tipadas ou funcionais? tbh tudo que eu vi funciona para, por exemplo, Java, direto da caixa, mas exigiria alguma adaptação para, por exemplo, js. Quais são as diretrizes possíveis para adaptar padrões de arquitetura comuns a uma linguagem de tipo fraco? alguém deveria tentar isso ou deveria ser completamente diferente?
Tristan Tzara
minha preocupação era que, se alguém está usando, por exemplo, Java, existem muitas práticas recomendadas e padrões para arquitetura, mas eu não vi nenhuma para linguagens de tipos diferentes. então eu estava pensando, como tratá-los
Tristan Tzara
basicamente, por exemplo, o SOLID ainda permanece nesse caso? como se adaptar se sim? o que se deve fazer se não?
Tristan Tzara
Os princípios do SOLID são muito orientados a objetos na origem. No entanto, acho que eles codificam princípios de ordem superior que podem ser aplicáveis ​​a qualquer sistema de software, independentemente da linguagem. Mas os princípios rudimentares são exatamente isso: você deve conhecê-los e compreendê-los antes de construir muito além de um alimentador de pássaros.
RibaldEddie
A programação orientada a objetos @TristanTzara foi inventada antes e sem qualquer linguagem orientada a objetos. Você pode fazer isso em qualquer idioma de uso geral. Mesmo aqueles que não têm aulas.
Candied_orange 13/0518
1

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).

rbanffy
fonte