A importância dos Padrões de Design com Javascript, NodeJs et al

36

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 programação orientada a eventos assumindo a liderança do lado do servidor e do cliente:

Você, como desenvolvedor de Javascript, considera os Padrões de Design tradicionais tão importantes ou menos importantes do que os outros idiomas / ambientes?

Por favor nomeie os três principais padrões de design que você, como desenvolvedor de Javascript, usa regularmente e dá um exemplo de como eles ajudaram no desenvolvimento de Javascript.

    
por Lewis 06.05.2011 / 12:05
fonte

4 respostas

23

Do you as a Javascript developer consider the traditional Design Patterns as important or less important than they have been with other languages / environments?.

Padrões de design clássicos 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 empurro para tratar JavaScript como LISP, em vez de Java. Portanto, tente emular monads e código de estilo funcional de alto nível, em vez de tentar emular o código OOP clássico.

Please name the top three design patterns you, as a Javascript developer use regularly and give an example of how they have helped in your Javascript development.

Novamente os padrões de design não se aplicam muito, mas abaixo estão três construções importantes.

  1. Uso de fechamentos
  2. Uso de funções de primeira classe
  3. Uso de fábricas de objetos com ou sem new

Por favor, deixe algum tipo de contexto para o qual eu possa mostrar exemplos deste tipo de técnicas em comparação a fazer 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 padrões alternativos mais adequados ao próprio js:

Padrão do observador:

Em node.js , isso é simplesmente events.EventEmitter . Em jQuery , isso é $.fn.bind & & %código%. Em $.fn.trigger , isso é backbone e Backbone.Events.trigger . Este é um padrão muito comum usado no código do dia a dia.

Eu nunca paro e penso "Ei, estou usando um padrão de observador aqui!". Não, isso é apenas um modo de baixo nível para passar mensagens ou uma forma de mudar as cascatas.

Por exemplo, no backbone todas as visualizações do MVC são vinculadas ao evento Backbone.Events.bind dos modelos, portanto, a alteração do modelo propicia mudanças automáticas na exibição. Sim, este é um padrão poderoso, mas seu uso é tão comum em programação orientada a eventos que não estavam percebendo que estavam sendo usados em todos os lugares.

No onchange prototcol, temos WebSocket , que usamos para vincular a .on events. Novamente, isso é muito comum, mas é um observador em um fluxo, em vez de seu on("message", ... baseado em POO clássica.

Todos esses são usos poderosos do padrão Observer. Mas este não é um padrão que você usa. Esta é uma parte simples da linguagem. Isso é apenas código.

Padrão de lembrança:

Isso é simplesmente JSON. Ele permite que você serialize o estado de um objeto para que você possa desfazer uma ação.

function SomeObject() {
    var internalState;

    this.toJSON = function() {
        return internalState;
    }

    this.set = function(data) {
        internalState = data;
    }

    this.restore = function(json) {
        internalState = JSON.parse(json);
    }
}

var o = new SomeObject();
o.set("foo"); // foo
var memento = JSON.stringify(o);
o.set("bar"); // bar
o.restore(memento);

Em JavaScript, oferecemos suporte nativo a uma API para mementos. Apenas defina um método chamado while (byte b = Stream.ReadNextByte()) em qualquer objeto. Quando você chamar toJSON , ele chamará internamente JSON.stringify em seu objeto para obter os dados reais que deseja serializar em JSON.

Isso permite que você faça instantaneamente instantâneos do seu código.

Novamente, não percebo isso como 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. Apenas injetar funções ou alterar propriedades em tempo real.

    
por 06.05.2011 / 14:32
fonte
10

Tome esta resposta como opinião subjetiva.

Do you as a Javascript developer consider the traditional Design Patterns as important or less important than they have been with other languages / environments?

Se você quer dizer padrões tradicionais de design como Gang of Four , então a maioria das técnicas é agnóstica em termos de linguagem / plataforma Programe para uma interface, não uma implementação "ou" favorece a composição do objeto sobre herança de classe "e é igualmente importante também para desenvolvedores de JavaScript.

Padrões mais específicos, como criacionais, estruturais e comportamentais, podem ou não precisar ser usados da mesma forma ou com a mesma frequência que em outros idiomas, porque os recursos de linguagem podem afetar seu uso em grande medida. Algumas linguagens (JavaScript incluído) têm seus próprios padrões de design baseados 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 linguagens, mas padrões específicos de JavaScript são mais importantes que os tradicionais.

name the top three design patterns you, as a Javascript developer use regularly and give an example of how they have helped in your Javascript development

Entre os Padrões de design essenciais do JavaScript , eu uso principalmente estes:

1. Padrão de construtor (com protótipos)

Especialmente no lado do servidor ao escrever coisas node.js, porque é bem adequado para escrever módulos, embora não tenha encapsulamento nativo. Também é popular para muitos outros desenvolvedores se você navega por repositórios no GitHub, então a familiaridade com esse padrão pode ajudá-lo a entender melhor outros códigos.

2. Revelando Padrão de Módulo

Oferece modularidade com encapsulamento.

3. Padrão DRY

Isso é um pouco específico do cenário, embora todo desenvolvedor deva usá-lo o máximo possível (im).

    
por 06.05.2011 / 14:19
fonte
2

Padrões de design são ensinados em classes 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 tenha sido pensada.

Também permite que os programadores se comuniquem com mais facilidade. Você pode conversar com seu colega de trabalho em termos de padrões também. Se você diz aqui que eu tenho o meu Observer, então é muito bem entendido o que está acontecendo.

As pessoas naturalmente encontrarão soluções que se encaixem em um padrão de design por conta própria, mas os padrões de design ajudam a definir a terminologia e as ideias padrão que podem ser úteis.

Não há nada de extraordinário nos padrões, a melhor coisa é que são ideias canonizadas e definidas de maneiras que são úteis repetidamente.

    
por 18.05.2012 / 20:07
fonte
1

Do you as a Javascript developer consider the traditional Design Patterns as important or less important

Eles são vitais.

Isso ocorre porque os conceitos de soluções reutilizáveis podem transcender a linguagem.   - alterações de sintaxe   - mudanças na implementação   - A noção de padrão ainda existe.

Desenvolvedores de qualquer idioma podem aprender JS avançado por padrões de aprendizado, não por sintaxe.   Aqueles que não sabem isso estão perdendo.

Please name the top three design patterns you, as a Javascript developer use regularly

Existem padrões que são usados com frequência, com os quais alguns "argumentam". No entanto, eles são bons para saber porque são extremamente comuns e poderosos em JS avançado.

1- Namespace - envolva seu código em um objeto.

var x = (function () {}) ();

2- ObjectConfiguration, padrão de fábrica. -Passar um objeto para uma função, não um monte de vars.

var product = factory ({});

3- função de retorno de chamada. - Passar uma função como parâmetro, a ser chamado quando a tarefa estiver completa.

function longTask (function () {// me chama quando terminar});

Como eu disse, alguns podem argumentar que estes não são padrões, mas eles são muito comuns e muito poderosos, e devem ser mencionados porque eles são de fato soluções reutilizáveis muito úteis para problemas comuns. Qual é a definição do Padrão de Design.

Excelente pergunta.

Espero que ajude.

    
por 21.09.2012 / 18:34
fonte