Revealing module pattern is one of the sub pattern of the module pattern. Don't know how many people still use module pattern in javascript, and I have seen a fair amount of code which uses RMP.
So what is a module pattern anyway?
- The public members are exposed in the return function.
- The private members live in the closure.
function greet() {
const name = "Natasha";
return {
function greetHello() {
return `Hello ${name} ! Thanks for signing up!`;
}
function greetWelcome() {
return `Hello ${name} ! Welcome back!`;
}
}
}
How RMP is different from Module pattern?
- All the functions live in the closure.
- Only the functions that should be exposed are made public under return.
- The return functions will not have any function definitions. It will just reference the functions in the private.
(function greet() {
const name = "Natasha"
function greetHello() {
return `Hello ${name} ! Thanks for signing up!`;
}
function greetWelcome() {
return `Hello ${name} ! Welcome back!`;
}
return {
hello: greetHello,
welcome: greetWelcome
}
})();
const hello = greet.hello(); //Hello Natasha ! Thanks for signing up!
const welcome = greet.welcome(); //Hello Natasha ! Welcome back!
- It gives a flexibility to reference the function name with our choice. Here greetHello is the function but it is exposed as hello. This helps in a lot of scenarios, let's say you are writing an API and the module would want a function name saveDetailsToDB for understanding the logic but not anyone who wants to use the API need that information, so you can just say
return {save: saveDetailsToDB}
. - Removing the key pair from the return object would make the exposed function private. Whereas in module pattern you have to remove the function from return object.
I have been a big fan of this pattern and it is just an admiration post on how beautiful it is :P
Top comments (0)