Qual é a diferença entre padrões de design e padrões arquitetônicos?

119

Quando lemos sobre padrões de design na Internet, notamos que existem 3 categorias:

  • Criativo
  • Estrutural
  • Comportamental

Mas quando criamos a arquitetura de um software, pensamos em MVP, MVC ou MVVM.

Por exemplo, entre os padrões de criação, encontrei o padrão singleton , mas também usei o singleton no meu MPV.

Portanto, minha pergunta é: um padrão de design é uma estrutura geral de um produto?

  • Se sim, então como o singleton pode ser um padrão de projeto? Porque posso usá-lo em qualquer lugar do meu aplicativo. Basicamente, ele se restringe apenas a criar uma instância por vez na memória, mas esse conceito não define como o software é projetado?

  • Se não, onde estão MVP, MVC e MVVM nas três categorias de padrões? E qual é a diferença entre design e arquitetura de software?

Jeevan Bhatt
fonte
Já discutido: stackoverflow.com/a/46419722/3649347
Diga-me como
2
Confira esta lista de recursos de padrão de design e padrão de arquitetura github.com/DovAmir/awesome-design-patterns
dov.amir

Respostas:

174

Requer uma explicação detalhada, mas tentarei esboçar as diferenças da melhor maneira possível.

Os padrões são semelhanças destiladas que você encontra em programas. Ele nos permite desconstruir uma grande estrutura complexa e construir usando peças simples. Ele fornece uma solução geral para uma classe de problemas.

Um grande software complexo passa por uma série de desconstruções em diferentes níveis. Em um nível geral, os padrões arquitetônicos são as ferramentas. Em um nível menor, os padrões de design são as ferramentas e, no nível de implementação, os paradigmas de programação são as ferramentas.

Um padrão pode ocorrer em níveis muito diferentes. Veja Fractais . Classificação rápida e classificação por mesclagem são todos padrões de algoritmos para organizar um grupo de elementos em um pedido.

Para uma visão mais simplista:

  • Paradigmas de programação - específicos para linguagem de programação
  • Padrões de design - resolve problemas recorrentes na construção de software
  • Padrões arquitetônicos - organização estrutural fundamental para sistemas de software

Expressões idiomáticas são técnicas de programação específicas de paradigma e de linguagem que preenchem detalhes de baixo nível.

Os padrões de design são geralmente associados a semelhanças de nível de código. Ele fornece vários esquemas para refinar e construir subsistemas menores. Geralmente é influenciado pela linguagem de programação. Alguns padrões tornam-se insignificantes devido aos paradigmas da linguagem . Os padrões de design são táticas de média escala que dão corpo a parte da estrutura e do comportamento das entidades e seus relacionamentos.

Enquanto os padrões arquitetônicos são vistos como semelhanças em um nível mais alto do que os padrões de design. Os padrões arquitetônicos são estratégias de alto nível que dizem respeito a componentes em grande escala, propriedades globais e mecanismos de um sistema.

Como os padrões são obtidos? Através:

  1. reuso,
  2. classificação
  3. e, finalmente, abstração para destilar a semelhança.

Se você seguiu os pensamentos expostos acima. Você verá que Singleton é um "padrão de design", enquanto MVC é um dos padrões "arquitetônicos" para lidar com a separação de interesses.

Tente ler em:

  1. http://en.wikipedia.org/wiki/Architectural_pattern_(computer_science)
  2. http://en.wikipedia.org/wiki/Design_pattern
  3. http://en.wikipedia.org/wiki/Anti-pattern
pyfunc
fonte
14
Muito bem feito e elaborado. Agora, eu só queria que todos usassem os termos tão diferenciados quanto você os colocou aqui. Posso prender uma impressão de sua resposta na parede acima da cafeteira de nosso departamento de marketing. Talvez eles entendam um dia. ;-)
ofi
@ofi: Obrigado! O uso da construção da linguagem pode nos enganar e nos guiar. Isso é algo que considero muito poderoso.
pyfunc
+3 por nos salvar das perguntas da entrevista :)
RAJESH KUMAR ARUMUGAM
Boa resposta, obrigado !! como disse @ofi, vou imprimir e prender na parede da equipe de design.
roll
11

Design Patterns são padrões bem conhecidos para resolver problemas técnicos de uma forma que já foi comprovada muitas vezes. Os padrões de design são estruturas e práticas de design comuns que contribuem para a criação de software orientado a objetos reutilizável. Os exemplos de padrões de projeto são Padrão de fábrica, Singleton, Fachada, Estado, etc. Os padrões de projeto podem ser usados ​​para resolver problemas menores em todo o aplicativo e são muito mais fáceis de injetar, alterar e adicionar do que a arquitetura geral

padrões de arquitetura são padrões bem conhecidos para resolver problemas de arquitetura de aplicativos de software. Arquitetura de aplicativo de software é o processo de definição de uma solução estruturada que atenda a todos os requisitos técnicos e operacionais. A arquitetura do aplicativo é a 'organização' geral do código. Exemplos de diferentes arquiteturas podem ser MVC, MVVM, MVP, n-layer (ou seja, UI-BLL-DAL), etc. A arquitetura normalmente precisa ser decidida com antecedência e muitas vezes é difícil de mudar uma vez que o aplicativo é construído.

Pawan Kumar Tiwari
fonte
1

Os elementos arquitetônicos tendem a coleções de classes ou módulos, geralmente representados como caixas. Os diagramas sobre arquitetura representam o nível mais elevado olhando para baixo, enquanto os diagramas de classes estão no nível mais atômico. O objetivo dos padrões de arquitetura é compreender como as principais partes do sistema se encaixam, como as mensagens e os dados fluem pelo sistema e outras questões estruturais. Os padrões de arquitetura utilizam uma variedade de tipos de componentes, cada um tipicamente composto de módulos sucessivamente menores. Cada componente tem uma responsabilidade dentro da arquitetura Padrões de design são padrões de design de baixo nível ou de nível de classe para partículas menores de aplicativos.

Para mais informações: https://www.oreilly.com/ideas/contrasting-architecture-patterns-with-design-patterns

Vishnu Chandel
fonte
0

Bem, na maior parte é uma questão de idioma. De acordo com a minha experiência a fronteira entre design e arquitetura, no que diz respeito ao software, é um rio largo com a sua largura decorrente do nível da água que por sua vez é influenciado principalmente pelas estações do mercado. Geralmente, o termo "design" é usado com um aspecto forte do comportamento do produto de software reconhecido pelos usuários finais, enquanto "arquitetura" representa a estrutura técnica de um software, ou seja, os componentes, bibliotecas, protocolos e tudo o que for necessário para cumprir os Projeto. Os "padrões de design" assumem duas funções: primeiro, são considerados as melhores práticas para resolver uma categoria de (mais ou menos) problemas padrão, não produtos; 2º eles ajudam os desenvolvedores a se comunicarem. Permanecendo com seu exemplo de um Singleton, permite-nos saber do que se trata a mecânica apenas usando a palavra, em vez de explicar todas as vezes, que criamos uma única instância usando um espaço de dados designado (variável ou qualquer outro) que é definido de maneira controlada e com garantia de ser o único, porque protegemos o construtor da classe etc. Então, IMHO, a resposta curta à sua pergunta é: Depende de quem está falando. Isso faz algum sentido?

ofi
fonte
0

Os Padrões de Design diferem dos Padrões de Arquitetura em seu escopo, eles são mais localizados, têm menos impacto na base do código, impactam uma seção específica da base do código, por exemplo:

How to instantiate an object when we only know what type needs to be instantiated at run time (maybe a Factory Class?)
How to make an object behave differently according to its state (maybe a state machine, or a Strategy Pattern?)

Os padrões arquitetônicos têm um impacto amplo na base do código, na maioria das vezes impactando todo o aplicativo horizontalmente (ou seja, como estruturar o código dentro de uma camada) ou verticalmente (ou seja, como uma solicitação é processada das camadas externas para as internas e costas). Exemplos de padrões arquitetônicos: Model-View-Controller, Model-View-ViewModel

Isuru vindula
fonte