@ Bigown: Você deve "aceitar" a resposta que mais gostou. Se você não gostar de nenhuma das respostas, ofereça uma recompensa.
Macneil
2
votou para fechar como não construtivo - isso é basicamente uma pesquisa. A menos que alguém tenha um estudo empírico a citar, todas as respostas serão palpites ou favoritos (ou não favoritos) e os votos refletirão sentimentos pessoais. O resultado final será uma lista de padrões de design sem profundidade. Portanto, não construtivo.
Steven A. Lowe
@ Steven: Eu tenho certeza que Jay está certo com The Big Ball of Mud. :-)
Concordo, quando você iniciar um novo projeto tudo está bem estruturada e documentada, mas como o prazo se aproximava, tudo acaba como uma grande bola de lama
Arturo Molina
3
@ Arturo - Essa é uma razão possível. Outros: 1) Pequeno projeto iniciado por programador inexperiente que é inesperadamente bem-sucedido e depois cresce além do objetivo original. 2) A tendência de programadores inexperientes serem atribuídos à manutenção, que então não têm orientação ou entendimento da arquitetura original; portanto, eles simplesmente invadem as coisas e pioram com o envelhecimento do sistema. 3) A equipe usa a tecnologia errada, ou uma nova tecnologia que eles não estão familiarizados com e usá-lo mal em um novo projeto, e crateras antes do prazo :)
Jay
11
LOL - se eu pudesse acrescentar mais pontos a você, acrescentaria. Excelente (e triste) observação.
Luis.espinal
25
O MVC e suas variações são definitivamente um dos principais padrões de design.
Eu ia dizer que a pergunta do OP é meio boba (ainda acredito que seja). No entanto, sua resposta é praticamente certa IMO. Se existe um padrão (e suas variações) que é praticamente usado de forma consistente, é esse. +1 para sua boa resposta.
Luis.espinal
21
Se você está falando padrões de design do Gang-of-Four , eu diria Singleton . Esse é realmente um estado de coisas triste - quase como se os programadores ouvissem sobre a magia dos padrões de design e parassem depois do primeiro.
Se você está falando sobre padrões de estilo arquitetural (em outras palavras, padrões de design que abrangem várias classes ou camadas), eu diria MVC . Alguns outros populares são o padrão do repositório e o localizador de serviço .
É ainda mais triste quando você considera que muitas pessoas consideram o Singleton um antipadrão!
precisa saber é o seguinte
11
@ RichardhardOD, triste que as pessoas considerem um quando não é, ou triste que as pessoas o usam quando é um anti-padrão?
Matt Olenik
O que eu quero dizer é que é triste que seja tão popular - parece ser o favorito da entrevista. Na última vez em que fui entrevistado, perguntaram-me como codificaria um Singleton, e minha resposta foi que não usaria um contêiner de IoC como o Unity para lidar com isso para mim.
RichardOD
@ Richardhard - não é singleton que é considerado um anti-padrão. É o uso abusivo disso que é um antipadrão. Muito poucos casos realmente exigem / precisam de singleton e, em ambientes com contêineres que controlam a granularidade de recursos, eles nem são necessários. Quando você vê um singleton em uma base de código Java moderna, por exemplo, que é um tipicamente uma bandeira vermelha para um anti-padrão de uso (não no próprio padrão Singleton.)
luis.espinal
@Jaco - Eu teria uma opinião diferente de você. Penso que composição, estratégia e modelo (e suas múltiplas reencarnações) tornaram-se muito, muito mais prevalentes que o singleton, especialmente desde que nos concentramos na composição estrutural sobre a herança na última década.
Pense em qualquer interface REST como o Twitter ou as APIs SO. Está escondendo um monte de coisas de back-end que, pelo menos no caso dos twitters, podem ser terrivelmente complexas.
Eu me importo em quais tabelas db @ os tweets de apklusk estão armazenados? E que tem um cache rápido? E que @shemnon tem leitores tão baixos que os tweets sempre ficam sem memória? Essa é a mágica da fachada.
De acordo, a estratégia para além de molde e composto (e suas variações múltiplas e combinação.)
luis.espinal
5
Por que ninguém mencionou o iterador ainda? Especialmente com todos os mapas que compõem estruturas de dados complexas ... é o que eu mais uso. Ou estamos falando de padrões que reimplementamos?
Estou surpreso que ninguém tenha mencionado o padrão Factory, na minha experiência, que é um dos padrões mais usados (e também mais abusados) por aí. Se não fosse o primeiro, provavelmente o singleton deveria ser o primeiro, eu teria pensado que seria um segundo próximo.
Juntamente com a minha resposta anterior, adicionarei uma nova que encontrei hoje de minha besta de um projeto herdado:
Copiar colar
Durante a depuração, deparei-me com um pedaço de código que chamava 2 funções com nomes semelhantes:
if(x)
Func1
else
Func2
Func1 e Func2 tinham os mesmos parâmetros. Peguei-os e diferenciei, e eles são 100% iguais, exceto o Func1 chama Func3 e Func2 chama Func4. Puxei aqueles e os diferenciei. 100% o mesmo, exceto por 1 linha. Portanto, um programador anterior decidiu copiar e colar duas funções aninhadas de 50 linhas, em vez de adicionar um parâmetro flag, a 2 funções particulares usadas em exatamente 1 local. Isso me faz querer chorar.
Falando sobre os padrões de design do Gang-of-Four, não consigo pensar em um programa que não use o padrão Observer. Além disso, como Jaco mencionou, o Singleton também é muito usado, infelizmente, tornou-se um martelo (qualquer programador o usa mesmo que não seja completamente necessário).
Engraçado, mas nunca tive a necessidade de usar um Singleton. Se eu precisar de algum lugar para manter o estado global, coloque-o em um arquivo de configuração e use uma classe normal para acessá-lo.
Robert Harvey
É claro que, nesses casos, não é necessário ... e quando você realmente precisa de um objeto para realizar algum trabalho, de forma síncrona e com segurança para threads. Singleton não é apenas para manter o estado de algumas variáveis estáticos, é um objeto real com o verdadeiro trabalho a fazer, etc.
Cristian
O único momento em que vi necessidade é de conexões com o banco de dados. Dito isto, quase todas as classes de "Serviço" (leia-se: semelhante à fábrica) neste projeto no trabalho são um singleton, armazenado na $_SESSIONvariável PHP .
Tarka
2
Intérprete
Raramente implementado, frequentemente usado. XPATH, XSLT, Regex, seletores jQuery, etc.
Estou surpreso que ninguém tenha dito "Construtor" ainda. Ou "Adaptador". Eles provavelmente não são tão exóticos como alguns dos outros mencionados, mas eu os uso o tempo todo. Factory e Abstract Factory também são muito comuns (mas já foram tiradas).
No nível de design de software, eu argumentaria que Composite, Strategy e Template (e, em menor extensão, Factory) são os mais amplamente utilizados. Nos últimos dez anos, vimos uma preferência pela composição em vez da herança ao construir nossos sistemas usando um projeto OO. Como resultado, a combinação dos padrões mencionados acima desempenha um papel muito mais importante do que todos os outros da OMI.
Arquitetonicamente, eu defenderia o MVC na empresa e padrões baseados em máquinas de estado no lado incorporado das coisas.
Respostas:
Tenho certeza de que o mais comum é 'The Big Ball of Mud'. Infelizmente para todos nós.
http://en.wikipedia.org/wiki/Big_ball_of_mud
fonte
O MVC e suas variações são definitivamente um dos principais padrões de design.
fonte
Se você está falando padrões de design do Gang-of-Four , eu diria Singleton . Esse é realmente um estado de coisas triste - quase como se os programadores ouvissem sobre a magia dos padrões de design e parassem depois do primeiro.
Se você está falando sobre padrões de estilo arquitetural (em outras palavras, padrões de design que abrangem várias classes ou camadas), eu diria MVC . Alguns outros populares são o padrão do repositório e o localizador de serviço .
fonte
Observador
Se você já usou um evento. Você usou o Observer.
fonte
Decorador
Adicione funcionalidade a um objeto em tempo de execução através da composição. Meu favorito pessoal.
Edit: Também Factory é provavelmente um dos mais comuns.
fonte
Fachada
Pense em qualquer interface REST como o Twitter ou as APIs SO. Está escondendo um monte de coisas de back-end que, pelo menos no caso dos twitters, podem ser terrivelmente complexas.
Eu me importo em quais tabelas db @ os tweets de apklusk estão armazenados? E que tem um cache rápido? E que @shemnon tem leitores tão baixos que os tweets sempre ficam sem memória? Essa é a mágica da fachada.
fonte
Padrão de Estratégia
Se você já usou injeção de dependência, usou o padrão de estratégia.
fonte
Por que ninguém mencionou o iterador ainda? Especialmente com todos os mapas que compõem estruturas de dados complexas ... é o que eu mais uso. Ou estamos falando de padrões que reimplementamos?
fonte
Estou surpreso que ninguém tenha mencionado o padrão Factory, na minha experiência, que é um dos padrões mais usados (e também mais abusados) por aí. Se não fosse o primeiro, provavelmente o singleton deveria ser o primeiro, eu teria pensado que seria um segundo próximo.
fonte
Juntamente com a minha resposta anterior, adicionarei uma nova que encontrei hoje de minha besta de um projeto herdado:
Copiar colar
Durante a depuração, deparei-me com um pedaço de código que chamava 2 funções com nomes semelhantes:
Func1 e Func2 tinham os mesmos parâmetros. Peguei-os e diferenciei, e eles são 100% iguais, exceto o Func1 chama Func3 e Func2 chama Func4. Puxei aqueles e os diferenciei. 100% o mesmo, exceto por 1 linha. Portanto, um programador anterior decidiu copiar e colar duas funções aninhadas de 50 linhas, em vez de adicionar um parâmetro flag, a 2 funções particulares usadas em exatamente 1 local. Isso me faz querer chorar.
fonte
Falando sobre os padrões de design do Gang-of-Four, não consigo pensar em um programa que não use o padrão Observer. Além disso, como Jaco mencionou, o Singleton também é muito usado, infelizmente, tornou-se um martelo (qualquer programador o usa mesmo que não seja completamente necessário).
fonte
$_SESSION
variável PHP .Intérprete
Raramente implementado, frequentemente usado. XPATH, XSLT, Regex, seletores jQuery, etc.
fonte
Estou surpreso que ninguém tenha dito "Construtor" ainda. Ou "Adaptador". Eles provavelmente não são tão exóticos como alguns dos outros mencionados, mas eu os uso o tempo todo. Factory e Abstract Factory também são muito comuns (mas já foram tiradas).
fonte
Especificação
Não acho que esteja listado no GoF, mas uso variações o tempo todo.
fonte
O padrão de design usado com mais frequência é, obviamente, espaguete .
fonte
No nível de design de software, eu argumentaria que Composite, Strategy e Template (e, em menor extensão, Factory) são os mais amplamente utilizados. Nos últimos dez anos, vimos uma preferência pela composição em vez da herança ao construir nossos sistemas usando um projeto OO. Como resultado, a combinação dos padrões mencionados acima desempenha um papel muito mais importante do que todos os outros da OMI.
Arquitetonicamente, eu defenderia o MVC na empresa e padrões baseados em máquinas de estado no lado incorporado das coisas.
fonte