JavaScript Revealing Module Pattern

Disponível também em inglês

Se você programou em javascript a sua vida inteira escrevendo um monte de métodos de apenas um arquivo… pare! Aprenda como o Revealing Module Pattern pode te ajudar a separar e organizar o seu código.

Revealing Module Pattern quer dizer que você tem um Module (como um container ou classe) que você encapsula os métodos e expões strong>Reveal somente aqueles que você quer.

var converter = function(){

     var convertToString = function(aNumber){
        if(!checkIfIsNumber (aNumber)){
           return null;
        }

        return parseNumber(aNumber);
     },

     checkIfIsNumber = function(aNumber){
       if(isNumber(aNumber)){
          return true;
       } else {
          return false;
       }
     }

     return {
       convertToString: convertToString
     }

}();

O Module “converter” acima encapsula dois métodos: um método privado “checkIfIsNumber” e outro público “convertToString”. E eu estou apenas expondo Revealing o método “convertToString”.

Então use dessa forma:

var num = converter.convertToString(100);

O Module “converter” é auto invocado, por isso você consegue chamar diretamente o “converter”. Se você quiser que o Module funcione como uma classe, remova os parênteses”()” na última linha.

Então o Module ficará assim:

var converter = function(){

};

Então use dessa forma:

var num = new converter().convertToString(100);

Clean, bonito e organizado!

Bom é isso. Esperto que tenha ajudado.

Abaixo encontrará alguns links úteis.

JavaScript Revealing Module Pattern

Revealing Module Pattern: Perguntas, sugestões ou críticas são bem vindas. Boa sorte!

Faça download completo do código fonte no github.
Sobre o Autor:
Trabalha como arquiteto de soluções e desenvolvedor, tem mais de 16 anos de experiência em desenvolvimento de software em diversas plataformas sendo mais de 14 anos somente para o mercado de seguros.
  • Vitor Luiz Cavalcanti

    Tem algum motivo pra usar function expression ou é só questão de gosto?

    • E aí Vitor 🙂
      Vem de muitos anos desde quando aprendi sobre esse padrão.
      Usando outra forma, como ficaria o código usando Revealing Module Pattern?
      Abs.

      • Vitor Luiz Cavalcanti

        Usando function declaration da pra organizar melhor o escopo do IIFE porque as funções são hoisted.

        var interval = (function () {
        var SECOND = 1000;

        var id = null;
        var times = 0;

        return {
        times: times,
        start: start,
        stop: stop
        };

        function start(callback, seconds) {
        ...
        }

        function stop() {
        ...
        }
        } ());

  • Vitor Luiz Cavalcanti

    Essa não é a forma ideal de criar classes, o instanceof sequer funciona. O ideal seria usar o this no escopo pra atribuir os metódos e propriedades ou o prototype da função.

    • Olá Vitor! Não entendi esse seu comentário e onde ele se encaixa no código fonte desse artigo.
      Lembrando que o propósito é demonstrar o Revealing Module Pattern.
      Você poderia explicar o seu ponto de vista? obrigado.