Patrón Módulo con Javascript (Module Pattern)

Un patrón por excelencia en javascript que nos permitirá reutilizar nuestro código de manera eficiente.

Rodríguez Patiño, Eduardo
4,208 lecturas
Rodríguez Patiño, Eduardo
Hemos migrado hace poco nuestras publicaciones del blog antiguo. Si crees que esta se encuentra incompleta o sin coherencia deja un comentario para restaurarla manualmente.

Este patrón problablemente lo hayamos usado antes sin darnos cuenta y sin saber que era, a mí me ha pasado. La idea es crear un módulo que nos permita encapsular cierta lógica para que sea reutilzable en nuestro proyecto.

El problema de tener todo en funciones sueltas

Por ejemplo, antes yo solia tener todo en funciones y mi código quedaba muy desorganizado teniendo algo como esto:

function calcularIva(monto) {
    return monto * iva;
}

function calcularMontoSinIva(monto){
    return monto / (1 + iva);
}

function calcularUtilidad(costo, ingreso){
    return ingreso - costo;
}

function calcularTasaEfectivaAnual(capital, interes, periodos) {
    return capital * Math.pow(1 + interes, periodos);
}

Si bien esto es práctico y funciona, en proyectos reales este código va a ser mucho más extenso y vas a ser más tedioso de mantener. Así que lo mejor es optmizar todo el código usando el patrón Module.

Mejor usa módulos

var Formulas = (function(){
    var iva = 0.18;

    return {
        calcularIva: function(monto) {
            return monto * iva;
        },
        calcularMontoSinIva: function(monto){
            return monto / (1 + iva);
        },
        calcularUtilidad: function(costo, ingreso) {
            return ingreso - costo;
        },
        calcularTasaEfectivaAnual: function(capital, interes, periodos) {
            return capital * Math.pow(1 + interes, periodos);
        }
    };
})();

La variable Formulas es el Namespace (espacio de nombre) del módulo contiene una función autoejecutable. Una vez inicializada la variable será un Object que contiene la lógica que hemos especificado. Por ejemplo, si queremos llamar a las funciones de nuestro módulo Formulas, solo tendremos que llamar a sus propiedades.

Formulas.calcularMontoSinIva(400); // 338.98305084745766
Formulas.calcularIva(400); // 78
Formulas.calcularTasaEfectivaAnual(10000, 0.05, 2); // 11025

La principal ventaja es que nuestro código queda más limpio y ordenado. Por ejemplo, si entra un nuevo programador a la empresa ya no tendrá que leer todas las funciones sueltas que hay en nuestro proyecto generándole confusión, en este caso solo se limtará en el módulo (puede hacer un console.log a la variable Formulas para ver lo que tiene disponible).

Creando sub módulos dentro de un módulo

Podemos optimizar más nuestro módulo creando sub namespaces o pequeños módulos dentro de módulo.

var Formulas = (function(){
    var iva = 0.18;

    return {
        venta: {
            calcularIva: function(monto) {
                return monto * iva;
            },
            calcularMontoSinIva: function(monto){
                return monto / (1 + iva);
            },
            calcularUtilidad: function(costo, ingreso) {
                return ingreso - costo;
            }
        },
        financiera: {
            calcularTasaEfectivaAnual: function(capital, interes, periodos) {
                return capital * Math.pow(1 + interes, periodos);
            }
        }
    };
})();

Ahora nuestro módulo Formulas cuenta con 2 submódulos adicionales para ordenar mejor la lógica.

Formulas.venta.calcularMontoSinIva(400); // 338.98305084745766
Formulas.venta.calcularIva(400); // 78
Formulas.financiera.calcularTasaEfectivaAnual(10000, 0.05, 2); // 11025
¿Te gustó nuestra publicación?
Suscríbete a nuestro boletín