Com o Javascript aparecendo como a linguagem de programação onipresente da Web nos próximos anos, novas estruturas surgindo a cada cinco minutos e a programação orientada a eventos assumindo a liderança do servidor e do cliente:
Você, como desenvolvedor Javascript, considera os padrões de design tradicionais tão importantes ou menos importantes quanto em outros idiomas / ambientes ?.
Nomeie os três principais padrões de design que você, como desenvolvedor Javascript, usa regularmente e dê um exemplo de como eles ajudaram no seu desenvolvimento Javascript.
Respostas:
Os padrões clássicos de design não se aplicam ao JavaScript.
O que se aplica é escrever código modular e funcional.
Você deve usar uma mistura de construtores e funções de primeira classe.
Como desenvolvedor de JavaScript, eu pessoalmente busco tratar o JavaScript como LISP e não como Java. Portanto, tente emular mônadas e código de estilo funcional de alto nível, em vez de emular o código OOP clássico.
Novamente, os padrões de design não se aplicam muito, mas abaixo estão três construções importantes.
new
Deixe algum tipo de contexto para o qual eu possa mostrar exemplos desse tipo de técnica em comparação com o mesmo tipo de código usando padrões de design tradicionais.
Vamos dar uma olhada em alguns dos padrões de design clássicos e como implementá-los em js, bem como em padrões alternativos mais adequados para o próprio js:
Padrão do observador:
Nisto
node.js
é simplesmenteevents.EventEmitter
. EmjQuery
este é$.fn.bind
&&$.fn.trigger
. Embackbone
este éBackbone.Events.trigger
eBackbone.Events.bind
. Esse é um padrão muito comum usado no código do dia a dia.Eu nunca paro e penso "Hey, eu estou usando um padrão de observador aqui!". Não, essa é apenas uma maneira de baixo nível para transmitir mensagens ou uma maneira de mudar em cascata.
Por exemplo, no backbone, todas as visualizações do MVC se vinculam ao
onchange
evento models , portanto, alterar o modelo envia em cascata as alterações automaticamente para a visualização. Sim, esse é um padrão poderoso, mas seu uso é tão comum em programação orientada a eventos que não estavam percebendo que estavam sendo usadas em todos os lugares.No
WebSocket
prototol, temos o.on
que usamos para vincular aon("message", ...
eventos. Novamente, isso é muito comum, mas é um observador em um fluxo, e não no seu POO clássicowhile (byte b = Stream.ReadNextByte())
.Todos esses são usos poderosos do padrão Observer. Mas esse não é um padrão que você usa. Esta é uma parte simples do idioma. Isso é apenas código.
Padrão de lembrança:
Isso é simplesmente JSON. Permite serializar o estado de um objeto para desfazer uma ação.
Em JavaScript, oferecemos suporte nativo a uma API para lembranças. Basta definir um método chamado
toJSON
em qualquer objeto. Quando você chama,JSON.stringify
ele chama internamente.toJSON
seu objeto para obter os dados reais que você deseja serializar para JSON.Isso permite que você faça instantaneamente instantâneos do seu código.
Novamente, não percebo que isso seja um padrão de lembrança. Isso é simplesmente usando a ferramenta de serialização que é JSON.
Padrão de Estado / Padrão de Estratégia:
Você não precisa de um padrão de estado. Você tem funções de primeira classe e tipos dinâmicos. Basta injetar funções ou alterar propriedades rapidamente.
fonte
Tome esta resposta como opinião subjetiva.
Se você quer dizer padrões de design tradicionais como o Gang of Four , a maioria das técnicas é independente de linguagem / plataforma como "Programar em uma interface, não uma implementação" ou "Favorecer a composição do objeto sobre a herança de classe" e são igualmente importantes também para desenvolvedores de JavaScript.
Padrões mais específicos, como criacionista, estrutural e comportamental, podem ou não ser usados da mesma maneira ou com a mesma frequência que em outros idiomas, porque os recursos do idioma podem afetar seu uso em grande medida. Algumas linguagens (JavaScript incluído), portanto, têm seus próprios padrões de design com base na funcionalidade ou no açúcar sintático que oferecem.
Em geral, eu diria que os padrões de design tradicionais são tão importantes quanto em outras línguas, mas os padrões específicos de JavaScript são mais importantes que os tradicionais.
Entre os padrões essenciais de design do JavaScript, eu principalmente os utilizo:
1. Padrão do construtor (com protótipos)
Especialmente no lado do servidor ao escrever o arquivo node.js, porque é adequado para escrever módulos, embora não possua encapsulamento nativo. Também é popular para muitos outros desenvolvedores se você procurar repositórios no GitHub, portanto, a familiaridade com esse padrão pode ajudá-lo a entender melhor outros códigos.
2. Revelando o padrão do módulo
Oferece modularidade com encapsulamento.
3. Padrão SECO
Isso é bastante específico do cenário, embora todos os desenvolvedores devam usá-lo o máximo possível (im).
fonte
Os padrões de design são ministrados nas aulas de design para CS. Eles não são essenciais, mas realmente úteis se você puder encontrar situações análogas para ter uma solução que foi pensada.
Também permite que os programadores se comuniquem mais facilmente. Você também pode conversar com seu colega de trabalho em termos de padrões. Se você diz aqui que eu tenho meu Observador, então é bem compreendido o que está acontecendo.
As pessoas naturalmente encontrarão soluções que se encaixam em um padrão de design por conta própria, mas os padrões de design ajudam a definir terminologia e idéias padrão que podem ser úteis.
Não há nada de extraordinário nos padrões, o mais interessante é que são idéias canonizadas e definidas de maneiras que são repetidamente úteis.
fonte
Eles são vitais.
Isso ocorre porque os conceitos de soluções reutilizáveis podem transcender a linguagem. - alterações de sintaxe - alterações de implementação - A noção de padrão ainda existe.
Desenvolvedores de qualquer idioma podem aprender JS avançado aprendendo padrões, não sintaxe. Aqueles que não sabem disso estão perdendo.
Existem padrões usados com freqüência contra os quais alguns "argumentariam". No entanto, é bom saber porque são extremamente comuns e poderosos em JS avançado.
1- Espaço para nome - agrupe seu código em um objeto.
var x = (função () {}) ();
2- ObjectConfiguration, padrão de fábrica. Passe um objeto para uma função, não um monte de vars.
var product = factory ({});
3- Função de retorno de chamada. - Passe uma função como parâmetro, a ser chamada quando a tarefa estiver concluída.
function longTask (function () {// me liga quando terminar});
Como eu disse, alguns podem argumentar que esses não são padrões, mas são muito comuns e muito poderosos, e devem ser mencionados porque são, de fato, soluções reutilizáveis muito úteis para problemas comuns. Qual é a definição de Design Pattern.
Excelente pergunta.
Espero que ajude.
fonte