Design patterns javascript: O padrão de modelos

24/06/2021

Padrões de design são padrões que podem ser comumente aplicados no desenvolvimento de softwares. Para algo ser considerado um padrão ele deve obedecer a três critérios básicos: serem uma solução provada, serem facilmente reutilizáveis e podem ser usados em diversos sistemas distintos. O padrão de modelos que falaremos hoje não foge a essa regra.

Introdução

O padrão de módulos tem como objetivo no javascript simular o conceito de encapsulamento das linguagens de programação tipadas sendo o javascript em si uma linguagem de programação não tipada.

O que é o encapsulamento?

O encapsulamento é um mecanismo da linguagem de programação para restringir o acesso a alguns componentes dos objetos, escondendo os dados de uma classe e tornando-os disponíveis somente através de métodos. - devmedia

No javascript isso é traduzido criando-se funções e variáveis públicas e/ou privadas, dentro de um objetos, fazendo que que seus nomes fiquem "escondidos" do restante do código. 

1 - Closure

Um closure (fechamento) é uma função que se "lembra" do ambiente - ou escopo léxico - em que ela foi criada. - developer.mozilla.org



Graças a esse conceito o javascript pode simular as variáveis e funções públicas e privadas que existem em outras linguagens de programação.

O exemplo dado no stite da mozilla.org sobre clousure é algo como :

function makeFunc() {

var name = "Mozilla";

function displayName() {

alert(name);

}

return displayName;

}

var myFunc = makeFunc();

myFunc();


Nesse exemplo, o que está acontecendo é que a função myFunc, criada a partir da makeFunc() se tornou um "fechamento" ou closure da função da qual ela derivou. Portanto tudo que existia dentro da função inicial, incluindo variáveis e funções, está dentro da closure. é com esse conceito que podemos "imitar" variáveis privadas e com isso usar esse padrão.



2 - Outro exemplo prático

var myNamespace = (function () {
var myPrivateVar, myPrivateMethod;
   // A private counter variable
   myPrivateVar = 0;
   // A private function which logs any arguments
   myPrivateMethod = function( foo ) {
     console.log( foo );
};
return {
   // A public variable
   myPublicVar: "foo",
   // A public function utilizing privates
   myPublicFunction: function( bar ) {
     // Increment our private counter
     myPrivateVar++;
     // Call our private method using bar
     myPrivateMethod( bar );
   }
};
})();


Nesse  outro exemplo do livro "Aprendendo Padrões de Design JavaScript Um livro de Addy Osmani" podemos ver variáveis e funções consideradas privadas e públicas.

3 - Vantagens

  • Facilidade para pessoas que estão migrando de alguma linguagem orientada a objetos de se familiarizar com o javascript.
  • Organização do código.
  • privacidade: Onde o que está fora da classe não é capaz de acessar os valores da sua parte privada

4- Desvantagens

  • Como os acessos a itens público/privado são feitos de forma diferentes, portanto caso deseje mudar a visibilidade de um item terá, potencialmente, que alterar mais de um lugar no código.
  • É bastante complicado criar testes automatizados com esse padrão, devido a natureza das funções e variáveis privadas

Se esse artigo foi útil para você, considere se inscrever na nossa newslleter. Demora menos de um minuto e você vai ficar informado de artigos como esse e muito mais. Só precisamos do seu email: