🤕
pdp
  • Hello world!
  • Base IT Knowledge
    • OOP
      • GRASP
      • SOLID
    • FP
    • Data structures
  • ENGX
    • Design patterns
    • Release Strategy
      • Branching strategies
        • Trunk-Based Development
    • Clean code
      • Authoring/Naming
      • Code smells
      • Refactoring basis
  • Development processes
    • Waterfall
    • Agile
    • Scrum
  • Other
    • React
    • a11y
Powered by GitBook
On this page
  • Module
  • Singleton
  • Links

Was this helpful?

  1. ENGX

Design patterns

Module

Modules are an integral piece of any robust application's architecture and typically help in keeping the units of code for a project both cleanly separated and organized.

var testModule = (function () {
 
  var counter = 0;
 
  return {
 
    incrementCounter: function () {
      return counter++;
    },
 
    resetCounter: function () {
      console.log( "counter value prior to reset: " + counter );
      counter = 0;
    }
  };
 
})();
 
// Usage:
 
// Increment our counter
testModule.incrementCounter();
 
// Check the counter value and reset
// Outputs: counter value prior to reset: 1
testModule.resetCounter();

Advantages

This pattern allows the syntax of our scripts to be more consistent. It also makes it more clear at the end of the module which of our functions and variables may be accessed publicly which eases readability.

Disadvantages

A disadvantage of this pattern is that if a private function refers to a public function, that public function can't be overridden if a patch is necessary. This is because the private function will continue to refer to the private implementation and the pattern doesn't apply to public members, only to functions.

Public object members which refer to private variables are also subject to the no-patch rule notes above.

As a result of this, modules created with the Revealing Module pattern may be more fragile than those created with the original Module pattern, so care should be taken during usage.

Singleton

Links

PreviousData structuresNextRelease Strategy

Last updated 5 years ago

Was this helpful?

https://addyosmani.com/resources/essentialjsdesignpatterns/book/