Khachatryan-dev

Module Pattern և Revealing Module Pattern

Module Pattern և Revealing Module Pattern JavaScript-ում

Aram
Khachatryan

Module Pattern և Revealing Module Pattern JavaScript-ում


Մոդուլային մտածելակերպը հանդիսանում է ժամանակակից JavaScript ծրագրավորման անկյունաքարերից։ Module Pattern-ը և Revealing Module Pattern-ը թույլ են տալիս գրել մաքուր, ինկապսուլացված, վերահսկելի կոդ՝ առանց գլոբալ տարածքի աղտոտման։


Մինչև ES6 modules-ի ի հայտ գալը, JavaScript-ում մոդուլների ստեղծման հիմնական միջոցը եղել են IIFE-ները (Immediately Invoked Function Expressions)։




Module Pattern


Այն օգտագործում է IIFE՝ ստեղծելով փակ տարածք (scope), որտեղ կարող ենք սահմանել private (փակ) և public (բաց) անդամներ։


const CounterModule = (function () { // private members let count = 0;
function increment() { count++; }

function getCount() { return count; }

// public API return { increment, getCount }; })();

CounterModule.increment(); 
console.log(CounterModule.getCount()); // 1 console.log(CounterModule.count); // undefined (private)

Կարևոր հատկանիշներ՝

  • Փակ տարածքում պահվում են private տվյալները
  • Արտաքին աշխարհին ներկայացվում է միայն public API-ն



Revealing Module Pattern


Սա Module Pattern-ի պարզեցված և ավելի կարդացվող տարբերակն է։ Բոլոր ֆունկցիաները և փոփոխականները հայտարարվում են փակ տարածքում, իսկ հետո վերադարձվում է միայն այն, ինչ ուզում ենք բացել՝ օգտագործելով նույն անուններով օբյեկտ։


const MathModule = (function () { let PI = 3.14159;
function area(radius) { return PI * radius * radius; }

function circumference(radius) { return 2 * PI * radius; }

return { area, circumference }; })();

console.log(MathModule.area(2)); // 12.56636 console.log(MathModule.PI); // undefined

Արտահայտված առավելություններ՝

  • Կոդի կառուցվածքը ավելի պարզ է և ընթեռնելի
  • Հստակ է, թե որոնք են հասանելի արտաքին աշխարհին



Բարդ օրինակ՝ Dependency Injection Reveal Pattern-ով


Ներառելով կախվածություն մոդուլի մեջ՝ կարող ենք հասնել ավելի մոդուլային և թեստավորվող համակարգի։


const Logger = (function () { function log(message) { console.log(`[LOG]: ${message}`); }
return { log }; })();

const UserService = (function (logger) { let users = [];

function addUser(user) { users.push(user); logger.log(User ${user} added); }

function getUsers() { return users; }

return { addUser, getUsers }; })(Logger);

UserService.addUser('Anna'); console.log(UserService.getUsers());

Արդյունք՝

  • Մոդուլները միմյանցից բաժանված են՝ loose coupling
  • Կարող ենք թեստերի ժամանակ փոխարինել Logger-ը mock տարբերակով



Եզրակացություն


Module Pattern-ը և Revealing Module Pattern-ը JavaScript-ում թույլ են տալիս գրագետ կառավարել private/public տարանջատումը և կառուցել ինկապսուլացված մոդուլներ։ Չնայած այժմ ES6 մոդուլներն ավելի ընդունված են, այս մոտեցումները դեռ օգտակար են՝ closure-ների և encapsulation-ի համար, հատկապես library-ներ գրելու ժամանակ։


Հաջորդ մասում կանդրադառնանք ES6 դասերին և մոդուլներին՝ ժամանակակից OOP կիրառմամբ JavaScript-ում։




Buy me a coffee
  • 0
  • 1

Բացահայտիր Նոր գիտելիքներ

Մեկնաբանություններ
No data
Մեկնաբանություն չկա։ Կարող ես լինել առաջինը։
Գրել մեկնաբանություն
ՄԵկնաբանություն ավելացնելու համար պետք է մուտք գործելՄուտք