Design de software x arquitetura de software [fechado]

342

Alguém poderia explicar a diferença entre Design de Software e Arquitetura de Software?

Mais especificamente; se você disser a alguém para lhe apresentar o 'design' - o que você espera que ele apresente? O mesmo vale para 'arquitetura'.

Meu entendimento atual é:

  • Projeto: diagrama UML / fluxograma / wireframes simples (para interface do usuário) para um módulo específico / parte do sistema
  • Arquitetura: diagrama de componentes (mostrando como os diferentes módulos do sistema se comunicam entre si e com outros sistemas), que linguagem deve ser usada, padrões ...?

Corrija-me se eu estiver errado. Mencionei que a Wikipedia possui artigos em http://en.wikipedia.org/wiki/Software_design e http://en.wikipedia.org/wiki/Software_architecture , mas não tenho certeza se os compreendi corretamente.

Mads Mobæk
fonte
Alguma das perguntas abaixo foi útil? ;)
Patrick Karcher
Lembre-se de que, até certo ponto, a distinção (que certamente é real) é freqüentemente feita de pretensão. Nenhum arquiteto pode ser bom sem uma compreensão decente de design e construção, e nenhum designer pode ser bom sem uma compreensão razoável da arquitetura.
Hot Licks
E vi uma vez a arquitetura descrita como "design adequado a um propósito". Isso é um pouco banal, mas contém um pouco de verdade, pois a boa arquitetura deve, no final das contas, ser centrada no propósito versus centrada na implementação.
Hot Licks

Respostas:

329

Você está certo, sim. A arquitetura de um sistema é seu "esqueleto". É o nível mais alto de abstração de um sistema. Que tipo de armazenamento de dados está presente, como os módulos interagem entre si, quais sistemas de recuperação estão em vigor. Assim como os padrões de design, existem padrões de arquitetura: MVC, design em camadas de 3 camadas, etc.

O design de software trata da criação de módulos / componentes individuais. Quais são as responsabilidades, funções do módulo x? Da classe Y? O que pode fazer e o que não? Quais padrões de design podem ser usados?

Em resumo, a arquitetura de software é mais sobre o design de todo o sistema, enquanto o design de software enfatiza o nível do módulo / componente / classe.

Razzie
fonte
116
Além disso, a arquitetura geralmente lida com o que (é feito) e onde (é feito), mas nunca com como. Essa é a principal diferença: o design conclui como a arquitetura não fala (e não deveria) falar.
Asaf R
2
Olá @ AsafR! isso me fez pensar na arquitetura como análise, porque a análise lida com o que (é feito) e o design com como. você acha isso?
Chriss, 21/09/13
2
Atualmente, as pessoas fazem todo o design, implementação, manutenção dos servidores de back-end (provavelmente baseados em nuvem) e design de front-end (Web ou móvel) sozinhos. Eu acho que eles são chamados de desenvolvedores de pilha cheia. Direita?
Maziyar 1/08/14
11
Arquitetura é o esboço de um sistema, uma estrutura, um plano sobre a coisa toda. Design é apenas a atividade de fazer um plano. Você pode projetar uma arquitetura, projetar um módulo, até projetar um método.
Evan Hu
2
Isso ocorre porque o MVC é um projeto de arquitetura. O MVC não declara detalhes em si. O "View" pode ser um site, um winforms, um aplicativo de console. O modelo pode ser quase qualquer coisa, não indica nada de onde vem (camada do banco de dados ou o que for).
Razzie
80

Em algumas descrições do SDLC (Ciclo de Vida de Desenvolvimento de Software), eles são intercambiáveis, mas o consesus é que eles são distintos. Eles são ao mesmo tempo: diferentes (1) estágios , (2) áreas de responsabilidade e (3) níveis de tomada de decisão .

  • A arquitetura é a visão geral: a escolha de estruturas, linguagens, escopo, objetivos e metodologias de alto nível ( Rational , cascata , ágil etc.).
  • Design é a imagem menor: o plano de como o código será organizado; como serão os contratos entre diferentes partes do sistema; a implementação contínua das metodologias e objetivos do projeto. As especificações são escritas durante esta fase.

Esses dois estágios parecerão se misturar por diferentes razões.

  1. Projetos menores geralmente não têm escopo suficiente para separar o planejamento nesses estágios.
  2. Um projeto pode fazer parte de um projeto maior e, portanto, partes de ambos os estágios já estão decididas. (Já existem bancos de dados, convenções, padrões, protocolos, estruturas, código reutilizável etc.)
  3. Novas maneiras de pensar sobre o SDLC (consulte metodologias ágeis ) reorganizam um pouco essa abordagem tradicional. O design (arquitetura em menor grau) ocorre em todo o SDLC de propósito . Muitas vezes, existem mais iterações em que todo o processo acontece repetidamente.
  4. De qualquer maneira, o desenvolvimento de software é complicado e difícil de planejar, mas os clientes / gerentes / vendedores geralmente dificultam a mudança de metas e requisitos durante o processo. As decisões de design e até de arquitetura devem ser tomadas posteriormente no projeto, seja esse o plano ou não.

Mesmo que os estágios ou áreas de responsabilidade se misturem e aconteçam em todo o lugar, é sempre bom saber que nível de tomada de decisão está acontecendo. (Poderíamos continuar para sempre com isso. Estou tentando manter um resumo.) Terminarei com: Mesmo que pareça que seu projeto não tenha um estágio formal de arquitetura ou design / AOR / documentaiton, está acontecendo se alguém está conscientemente fazendo isso ou não. Se ninguém decide fazer arquitetura, acontece um padrão que provavelmente é ruim. O mesmo vale para o design. Esses conceitos são quase mais importantes se não houver estágios formais que os representem.

Patrick Karcher
fonte
Boa resposta. Eu gosto da ênfase em como um pode parecer fazer parte do outro. O quarto ponto levanta uma questão interessante: o design em um domínio de problemas específico é menos válido quando ele ainda não possui uma arquitetura? A experiência sugere que sim, mas, em teoria, eu gostaria de pensar que um design que se mantenha dentro do escopo apropriado (ou seja, para um componente em particular) deve ser igualmente válido, independentemente de como é eventualmente usado.
Tom W
55

A arquitetura é estratégica, enquanto o design é tático.

A arquitetura compreende estruturas, ferramentas, paradigmas de programação, padrões de engenharia de software baseados em componentes, princípios de alto nível.

Embora o design seja uma atividade relacionada a restrições locais, como padrões de design, idiomas de programação e refatorações.

Chris Kannon
fonte
Eu quero menos referências a "design" e "architeture" na definição de "design" para votar isso ...
Peter Hansen
11
Concordado .. talvez: a arquitetura compreende estruturas, ferramentas, paradigmas de programação, padrões de engenharia de software baseados em componentes, princípios de alto nível. Embora o design seja uma atividade relacionada a restrições locais, como padrões de design, idiomas de programação e refatorações.
26419 Chris Kannon
38

Eu encontrei isso enquanto procurava uma distinção simples entre arquitetura e design;
O que você acha dessa maneira de vê-los:

  • arquitetura é "o que" estamos construindo;
  • design é "como" estamos construindo;
George S.
fonte
4
O que estamos construindo são os requisitos do cliente. O modo como estamos construindo depende da arquitetura e do design. Então não, isso está completamente errado.
Marek
11
@Marek Não vejo o que há de errado nisso. Arquitetura é o que construir, o que o cliente deseja, como geralmente deve ser, quais componentes devem ser feitos etc. O design é como essas coisas são realmente feitas: As implementações reais de componentes, algoritmos etc.
RecursiveExceptionException
21
  1. Arquitetura significa a estrutura conceitual e organização lógica de um computador ou sistema baseado em computador.

    Projeto significa um plano ou desenho produzido para mostrar a aparência e a função ou funcionamento de um sistema ou objeto antes de ser feito.

  2. Se você está “arquitetando” um componente, está definindo como ele se comporta no sistema maior.

    Se você está “projetando” o mesmo componente, está definindo como ele se comporta internamente.

Toda arquitetura é design, mas nem todo design é arquitetura.

Whatparte é o Design, a Howimplementação concreta e a interseção Whate Howé a Arquitetura.

Imagem para diferenciar Arquitetura e Design :

Design vs Arquitetura

Também existem decisões de design, que não são arquitetonicamente significativas, ou seja, não pertencem ao ramo de arquitetura do design. Por exemplo, decisões internas de design de alguns componentes, como escolha de algoritmo, seleção da estrutura de dados etc.

Qualquer decisão de design que não seja visível fora do limite de seu componente é o design interno de um componente e não é arquitetural. Essas são as decisões de design que um arquiteto de sistema deixaria a critério do projetista do módulo ou da equipe de implementação, desde que o design não rompa as restrições arquiteturais impostas pela arquitetura no nível do sistema.

O link que dá uma boa analogia

TryinHard
fonte
Eu não gosto desta resposta. A arquitetura é o nível mais alto de abstração, portanto, você não deve se preocupar com "como" isso é feito. Eu concordo que o design ea arquitetura é de alguma forma ligado - O design é uma atividade que gera parte da arquitetura de um sistema, mas eu não diria "O quê e como" é Architecture porque é muito confuso ...
Martin Čuka
15

Eu diria que você está certo, em minhas próprias palavras;

Arquitetura é a alocação de requisitos do sistema para elementos do sistema. Quatro declarações sobre uma arquitetura:

  1. Ele pode introduzir requisitos não funcionais, como linguagem ou padrões.
  2. Define a interação entre componentes, interfaces, tempo, etc.
  3. Não deve introduzir novas funcionalidades,
  4. Ele aloca as funções (projetadas) que o sistema se destina a executar nos elementos.

A arquitetura é uma etapa essencial da engenharia quando uma complexidade do sistema é subdividida.

Exemplo: pense em sua casa, você não precisa de um arquiteto para sua cozinha (apenas um elemento envolvido), mas o edifício completo precisa de algumas definições de interação, como portas e um telhado .

Design é uma representação informativa da implementação (proposta) da função. Pretende-se obter feedback e discutir com as partes interessadas. Pode ser uma boa prática, mas não é uma etapa essencial da engenharia .

Seria bom ver o design da cozinha antes de instalar a cozinha, mas isso não é essencial para os requisitos de cozimento :

Se eu pensar sobre isso, você pode declarar:

  • arquitetura é para um público / engenheiros em um nível de abstração mais detalhado
  • design é destinado ao público em um nível de abstração menos detalhado
user662182
fonte
+1 para Arquitetura é a alocação de requisitos do sistema para elementos do sistema. -1 virtual para uso da palavra 'a' na lista final. Minha opinião sobre isso é a sua definição inicial (correta) é a antítese da abstração.
22811 Chris Walton
Não tenho certeza sobre os pontos 1 e 3. Nada deve apresentar mais funcionalidades do que o necessário para satisfazer os requisitos das partes interessadas. Restrições são mais um problema de metodologia. Os outros pontos são úteis. A analogia da cozinha não é ótima; você não precisa de um arquiteto, mas o design da cozinha é um campo bastante especializado em que algo é projetado usando componentes modulares. Não posso concordar que o design não é uma etapa essencial da engenharia. Não tenho certeza do significado dos dois últimos pontos.
Mike G
Onde a implementação se encaixa? A implementação não é o Design?
jwilleke
14

Meu lembrete:

  • Podemos mudar o design sem perguntar a alguém
  • Se mudarmos a arquitetura, precisamos comunicá-la a alguém (equipe, cliente, parte interessada, ...)
Peter Gfader
fonte
6

Eu acho que devemos usar a regra a seguir para determinar quando falamos sobre Design x Arquitetura: Se os elementos de uma imagem de software que você criou podem ser mapeados de um para um para uma construção sintática da linguagem de programação, então é Design, se não for Arquitetura.

Portanto, por exemplo, se você estiver vendo um diagrama de classes ou um diagrama de sequência, poderá mapear uma classe e seus relacionamentos para uma linguagem de programação orientada a objetos usando a construção sintática de classe. Isso é claramente design. Além disso, isso pode trazer à tona que essa discussão tem uma relação com a linguagem de programação que você usará para implementar um sistema de software. Se você usa Java, o exemplo anterior se aplica, pois Java é uma Linguagem de Programação Orientada a Objetos. Se você criar um diagrama que mostra pacotes e suas dependências, isso também é Design. Você pode mapear o elemento (neste caso, um pacote) para uma construção sintática Java.

Agora, suponha que seu aplicativo Java seja dividido em módulos, e cada módulo seja um conjunto de pacotes (representado como uma unidade de implementação de arquivo jar), e você será apresentado a um diagrama contendo módulos e suas dependências, ou seja, Arquitetura. Não existe uma maneira em Java (pelo menos até o Java 7) mapear um módulo (um conjunto de pacotes) para uma construção sintática. Você também pode observar que este diagrama representa uma etapa mais alta no nível de abstração do seu modelo de software. Qualquer diagrama acima (de granulação grossa que) um diagrama de pacotes representa uma visualização da Arquitetura ao desenvolver na linguagem de programação Java. Por outro lado, se você estiver desenvolvendo no Modula-2, um diagrama de módulo representa um Design.

(Um fragmento de http://www.copypasteisforword.com/notes/software-architecture-vs-software-design )

Enrique Molinari
fonte
Eu gosto muito disso. Boa contribuição. Não tenho certeza se é tão claro, mas em uma pergunta como essa é tão definitiva quanto você conseguirá. Eu gostaria de votar em você, mas estou sem votos no dia :(.
Mike G
5

Pessoalmente, eu gosto deste:

"O designer está preocupado com o que acontece quando um usuário pressiona um botão, e o arquiteto está preocupado com o que acontece quando dez mil usuários pressionam um botão".

Guia de Estudo do SCEA para Java ™ EE de Mark Cade e Humphrey Sheil

Tavi
fonte
Mesmo depois de ler esse livro mais de duas vezes, depois de ler todos os comentários acima, essa definição não faz sentido para mim. É por isso: a parte do designer parece boa porque você cuidará de todos os detalhes para garantir que o botão esteja fazendo o que deveria. Mas a parte do arquiteto não tem nada a ver com a interação dos módulos ou com o panorama geral, mas com o desempenho e coisas assim, você acha que eu não entendi algo dessa definição?
Rene Enriquez
5

Eu concordo com muitas das explicações; essencialmente, estamos reconhecendo a distinção entre o projeto arquitetônico e o projeto detalhado dos sistemas de software.

Embora o objetivo do projetista seja ser tão preciso e concreto nas especificações quanto necessário para o desenvolvimento; o arquiteto visa essencialmente especificar a estrutura e o comportamento global do sistema, tanto quanto necessário para começar o projeto detalhado.

Um bom arquiteto evitará hiperespecificações - a arquitetura não deve ser excessivamente especificada, mas apenas o suficiente, as decisões (arquitetônicas) estabelecidas apenas para os aspectos que apresentam riscos mais caros de serem tratados e fornecem efetivamente uma estrutura ("comunalidade") dentro da qual o projeto detalhado pode ser trabalhado, isto é, variabilidade para funcionalidade local.

De fato, o processo de arquitetura ou o ciclo de vida segue apenas esse tema - nível adequado de abstração para delinear a estrutura para os requisitos de negócios significativos (arquitetonicamente) e deixar mais detalhes na fase de design para entregas mais concretas.

Ajay Shendye
fonte
5

Arquitetura é design, mas nem todo design é arquitetônico. Portanto, estritamente falando, faria mais sentido tentar diferenciar entre projeto arquitetônico e projeto não arquitetônico . e qual é a diferença? Depende! Cada arquiteto de software pode ter uma resposta diferente (ymmv!). Desenvolvemos nossas heurísticas para obter uma resposta, como 'diagramas de classes são arquitetura e diagramas de seqüência são design'. Veja o livro DSA para mais.

É comum dizer que a arquitetura está em um nível de abstração mais alto que o design, ou a arquitetura é lógica e o design é físico. Mas essa noção, embora comumente aceita, é na prática inútil. Onde você desenha a linha entre abstração alta ou baixa, entre lógica e física? Depende!

Então, minha sugestão é:

  • crie um único documento de design.
  • nomeie este documento de design da maneira que desejar ou, melhor, da maneira como os leitores estão mais acostumados. Exemplos: "Arquitetura de software", "Especificação de design de software".
  • divida este documento em vistas e lembre-se de que você pode criar uma vista como um refinamento de outra vista.
  • Torne as visualizações no documento navegáveis ​​adicionando referências cruzadas ou hiperlinks
  • você terá vistas de nível superior, mostrando uma visão geral ampla, porém superficial, do design e vistas mais próximas da implementação, mostrando detalhes de design estreitos, mas mais profundos.
  • você pode dar uma olhada em um exemplo de documento de arquitetura com várias visualizações ( aqui ).

Dito tudo isso ... uma pergunta mais relevante que precisamos fazer é: quanto design é suficiente? Ou seja, quando devo parar de descrever o design (em diagramas ou prosa) e passar para a codificação?

Paulo Merson
fonte
11
Embora eu concorde com a definição inicial, seria interessante acrescentar sua fonte: "Paul Clements, Documentando arquiteturas de software: visões e além". Para sua última pergunta: você nunca para de projetar. É isso que Clements tenta apontar no livro referenciado. Todo desenvolvedor que trabalha no sistema cria uma parte dele, mas a maioria desses projetos não é relevante para a arquitetura. Portanto, se você quiser falar ou documentar a arquitetura do software, pare assim que estiver discutindo partes que não são mais relevantes.
Thomas Eizinger
11
@ThomasEizinger. Adicionei um link ao nosso livro. Boa sugestão. E seu comentário também ajuda a dar o devido crédito. Quanto à última pergunta, pretendia me referir ao esforço de documentação do projeto. Eu editei o parágrafo. Obrigado!
Paulo Merson
3

Sim, isso parece certo para mim. O design é o que você fará, e a arquitetura é a maneira pela qual os bits e partes do design serão unidos. Poderia ser independente do idioma, mas normalmente especificaria as tecnologias a serem usadas, por exemplo, LAMP v Windows, Serviço da Web v RPC.

MrTelly
fonte
3

A arquitetura de software de um programa ou sistema de computação é a estrutura ou estruturas do sistema, que compreende componentes de software, as propriedades visíveis externamente desses componentes e os relacionamentos entre eles.

(da Wikipedia, http://en.wikipedia.org/wiki/Software_architecture )

O design de software é um processo de solução de problemas e planejamento de uma solução de software. Após a determinação do objetivo e das especificações do software, os desenvolvedores de software projetam ou empregam designers para desenvolver um plano para uma solução. Inclui problemas de implementação de componentes e algoritmos de baixo nível, bem como a visualização da arquitetura.

(da Wikipedia, http://en.wikipedia.org/wiki/Software_design )

Não poderia ter dito melhor :)

Larry Watanabe
fonte
3

Eu vejo a arquitetura como Patrick Karcher - o cenário geral. Por exemplo, você pode fornecer a arquitetura de um edifício, visualizar seu suporte estrutural, janelas, entradas e saídas, drenagem de água etc. Mas você não "projetou" o layout do piso, as posições dos cubículos, etc.

Portanto, enquanto você arquitetou o prédio, não projetou o layout de cada escritório. Eu acho que o mesmo vale para o software.

Você pode visualizar o design do layout, como "arquitetando o layout" ...

sr-sk
fonte
3

Boa pergunta ... Embora a linha entre eles dificilmente seja uma linha nítida e brilhante, se você estiver usando os dois termos, a Arquitetura engloba decisões mais técnicas ou estruturais sobre como construir ou construir algo, especialmente aquelas que serão difíceis ( ou mais difícil) mudar uma vez implementado, enquanto o Design abrange aquelas decisões que são fáceis de alterar posteriormente (como nomes de métodos, estrutura organizacional do arquivo de classe <->, padrões de design, se você deve usar um singleton ou uma classe estática para resolver algum problema específico , etc.) e / ou aqueles que afetam a aparência ou os aspectos estéticos de um sistema ou aplicativo (interface humana, facilidade de uso, aparência etc.)

Charles Bretana
fonte
3

A arquitetura de software está “preocupada com problemas ... além dos algoritmos e estruturas de dados da computação.

A arquitetura não se refere especificamente a ... detalhes de implementações (por exemplo, algoritmos e estruturas de dados). O projeto arquitetônico envolve uma coleção mais rica de abstrações do que normalmente é fornecida pelo OOD ”(design orientado a objetos).

O design se preocupa com a modularização e as interfaces detalhadas dos elementos do design, seus algoritmos e procedimentos e os tipos de dados necessários para suportar a arquitetura e satisfazer os requisitos.

"Arquitetura" é freqüentemente usada como mero sinônimo de "design" (às vezes precedido pelo adjetivo "alto nível"). E muitas pessoas usam o termo "padrões arquitetônicos" como sinônimo de "padrões de design".

Confira este link.

Definindo os termos Arquitetura, Design e Implementação

Tebo
fonte
3

Arquitetura: o
projeto estrutural trabalha em níveis mais altos de abstração que atendem a requisitos tecnicamente significativos no sistema. A arquitetura estabelece as bases para um design adicional.

Design:
a arte de preencher o que a arquitetura não faz por meio de um processo iterativo em cada camada de abstração.

Joshua Ramirez
fonte
3

Gostei muito deste artigo como uma regra prática sobre a separação da arquitetura do design:

http://www.eden-study.org/articles/2006/abstraction-classes-sw-design_ieesw.pdf

É chamada de hipótese de Intensão / Localidade. Declarações sobre a natureza do software que não são locais e intensivas são arquitetônicas. Declarações locais e intensivas são design.

LindsayBradford
fonte
Sim, exatamente. Esse é o mesmo conjunto de idéias (dos mesmos autores) que sugiro acima. Eu acho que são idéias úteis nessa área.
Eoin
3

... há muito tempo, em um lugar distante, filósofos preocupados com a distinção entre um e muitos. Arquitetura é sobre relacionamento, o que exige muitos. Arquitetura tem componentes. Design é sobre conteúdo, o que requer um. O design tem propriedades, qualidades, características. Normalmente pensamos que o design está dentro da arquitetura. O pensamento dualista dá a muitos como primordial. Mas a arquitetura também está dentro do design. É tudo como escolhemos ver o que está diante de nós - um ou muitos.

buzzcoda
fonte
Eu gosto dessa resposta apenas por causa dessa frase "Mas a arquitetura também está dentro do design". Eu diria que "a arquitetura pode estar dentro do design". - você decide. Eles não estão separados.
Miroslav Trninic
3

Muito subjetivo, mas minha opinião:

Arquitetura O design geral do sistema, incluindo interações com outros sistemas, requisitos de hardware, design geral dos componentes e fluxo de dados.

Design A organização e o fluxo de um componente no sistema geral. Isso também inclui a API do componente para interação com outros componentes.

Jesse Vogt
fonte
2

A arquitetura de software é melhor usada no nível do sistema, quando você precisa projetar negócios e funções identificadas por níveis mais altos de arquitetura nos aplicativos.

Por exemplo, sua empresa trata de "Lucros e perdas" para traders, e suas principais funções envolvem "avaliação de portfólio" e "computação de risco".

Mas quando um arquiteto de software detalhar sua solução, ele perceberá que:

"avaliação de portfólio" não pode ser apenas um aplicativo. Ele precisa ser refinado em projetos gerenciáveis, como:

  • GUI
  • Launcher
  • Expedidor
  • ...

(porque as operações envolvidas são tão grandes que precisam ser divididas entre vários computadores, enquanto ainda são monitoradas o tempo todo por meio de uma GUI comum)

Um design de software examinará os diferentes aplicativos, seu relacionamento técnico e seus subcomponentes internos.
Ele produzirá as especificações necessárias para o trabalho da última camada de Arquitetura (a "Arquitetura Técnica") (em termos de estrutura técnica ou componentes transversais) e para o início das equipes do projeto (mais orientadas para a implementação das funções de negócios ) seus respectivos projetos.

VonC
fonte
2

se alguém constrói um navio, então o motor, o casco, os circuitos elétricos etc. serão seus "elementos arquitetônicos". Para ele, a construção do motor será "trabalho de design".

Se ele delegar a construção do mecanismo para outra equipe, eles criarão uma "arquitetura de mecanismo" ...

Então - depende do nível de abstração ou detalhe. A arquitetura de uma pessoa pode ser o design de outra!

Gernot Starke
fonte
2

Arquitetura são "as decisões de design difíceis de mudar".

Depois de trabalhar com o TDD, o que praticamente significa que o seu design muda o tempo todo, muitas vezes me vi lutando com essa pergunta. A definição acima é extraída de Patterns of Enterprise Application Architecture , por Martin Fowler

Isso significa que a arquitetura depende da linguagem, estrutura e domínio do seu sistema. Se você pode apenas extrair uma interface da sua Classe Java em 5 minutos, não é mais uma decisão da arquitetura.

ekeren
fonte
1

Versão do Cliff Notes:

Design: Implementando uma solução com base nas especificações do produto desejado.

Arquitetura: a base / ferramentas / infraestrutura / componentes que dão suporte ao seu design.

Essa é uma pergunta bastante ampla que invocará muitas respostas.

Ta01
fonte
1

Arquitetura é a coleção resultante de padrões de design para construir um sistema.

Eu acho que Design é a criatividade usada para juntar tudo isso?

Mark Redman
fonte
Eu tenho que discordar. parece que você (como eu e a maioria das outras respostas) coloca a arquitetura em um "quadro geral", enquanto o design é mais sobre os métodos e a solução de problemas. Mas, se a sua arquitetura é o que "resulta" dos padrões de design, eles você realmente não a arquitetou, apenas a deixou crescer!
Javier
... a menos que você apenas o deixe crescer, ou seja :-) É preciso algum conhecimento e experiência para ter criatividade para usar as técnicas disponíveis para criar uma arquitetura elegante. ... é obviamente muito subjetiva para chegar a algo definitivo ... mas sim você está certo considerando que há alguns sistemas ruins lá fora, sem projetos gerais do sistema (arquiteturas)
Mark Redman
1

O design de software tem uma história mais longa, enquanto o termo arquitetura de software tem apenas 20 anos. Por isso, está passando por dores de crescimento agora.

Os acadêmicos tendem a ver a arquitetura como parte de um campo maior de design de software. Embora haja um reconhecimento crescente de que o Arch é um campo em si.

Os profissionais tendem a ver a Arch como decisões de design de alto nível que são estratégicas e podem ser caras em um projeto para desfazer.

A linha exata entre o Arch e o design depende do domínio do software. Por exemplo, no domínio de aplicativos da Web, a arquitetura em camadas está ganhando mais popularidade atualmente (camada lógica de negócios, camada de acesso a dados etc.). As partes de nível inferior deste arco são consideradas design (diagramas de classes, assinaturas de métodos etc.). ) Isso seria definido de maneira diferente nos domínios de sistemas embarcados, sistemas operacionais, compiladores etc.

LeWoody
fonte
1

A arquitetura é de alto nível, design abstrato e lógico, enquanto o design de software é de baixo nível, detalhado e físico.

imran
fonte
1

Gosto da definição e explicação de Roy Thomas Fielding sobre o que é arquitetura de software em seu artigo: Estilos arquitetônicos e design de arquiteturas de software baseadas em rede

Uma arquitetura de software é uma abstração dos elementos de tempo de execução de um sistema de software durante alguma fase de sua operação. Um sistema pode ser composto de muitos níveis de abstração e muitas fases de operação, cada um com sua própria arquitetura de software.

Ele enfatiza "elementos de tempo de execução" e "níveis de abstração".

Jacky
fonte
os elementos de tempo de execução também se referem aos componentes ou módulos do aplicativo e cada módulo ou componente contém seu próprio nível de abstração. Corrigir?
Ankit Rana
1

Não existe uma resposta definitiva para isso, porque "arquitetura de software" e "design de software" têm várias definições e também não existe uma definição canônica.

Uma boa maneira de pensar sobre isso é a afirmação de Len Bass, Paul Clements e Rick Kazman de que "toda arquitetura é design, mas nem todo design é arquitetura" [Arquitetura de Software na Prática]. Não sei se concordo plenamente com isso (porque a arquitetura pode incluir outras atividades), mas captura a essência de que a arquitetura é uma atividade de design que lida com o subconjunto crítico do design.

Minha definição levemente irreverente (encontrada na página de definições do SEI ) é que é o conjunto de decisões que, se tomadas de maneira errada, fazem com que seu projeto seja cancelado.

Uma tentativa útil de separar arquitetura, design e implementação como conceitos foi realizada por Amnon Eden e Rick Kazman, há alguns anos, em um trabalho de pesquisa intitulado "Arquitetura, Design, Implementação", que pode ser encontrado aqui: http: //www.sei.cmu .edu / library / assets / ICSE03-1.pdf . Sua linguagem é bastante abstrata, mas simplisticamente eles dizem que a arquitetura é um design que pode ser usado em muitos contextos e deve ser aplicado em todo o sistema, design é um design (err) que pode ser usado em muitos contextos, mas é aplicado em uma parte específica do sistema e a implementação é design específico para um contexto e aplicado nesse contexto.

Portanto, uma decisão de arquitetura pode ser uma decisão de integrar o sistema via sistema de mensagens em vez de RPC (portanto, é um princípio geral que pode ser aplicado em muitos locais e se destina a ser aplicado a todo o sistema), uma decisão de design pode ser o uso de um mestre / estrutura de encadeamento escravo no módulo de tratamento de solicitações de entrada do sistema (um princípio geral que poderia ser usado em qualquer lugar, mas neste caso é apenas usado em um módulo) e, finalmente, uma decisão de implementação pode ser a de transferir responsabilidades pela segurança do Request Router ao manipulador de solicitações no módulo Gerenciador de solicitações (uma decisão relevante apenas para esse contexto, usada nesse contexto).

Eu espero que isso ajude!

Eoin
fonte