🚀 Освоєння патернів визначення модулів у Node.js

pic

Під час роботи з Node.js розуміння різних патернів визначення модулів може допомогти вам структурувати код більш модульно та зручно для підтримки.

У цій статті ми розглянемо чотири основні патерни експорту модулів: Іменований експорт (Named Exports), Експорт функції (Exporting a Function), Експорт конструктора (Exporting a Constructor) та Експорт екземпляра (Exporting an Instance). Ці патерни — чудові інструменти для створення масштабованих і повторно використовуваних компонентів у ваших Node.js додатках.

Давайте розглянемо, як і коли використовувати кожен з них!

1️⃣ Іменований експорт (Named Exports)

Іменовані експорти дозволяють експортувати кілька значень (функцій і змінних) з модуля. Це чистий і гнучкий підхід, особливо коли вам потрібно надати доступ до кількох частин модуля для різних цілей.

Приклад:

// math.js  
exports.add = (a, b) => a + b;  
exports.subtract = (a, b) => a - b;
const { add, subtract } = require('./math');  
console.log(add(2, 3)); // Виведе: 5  
console.log(subtract(5, 2)); // Виведе: 3

У цьому випадку ви можете імпортувати лише ті функції, які вам потрібні, що дозволяє підтримувати код чистим і ефективним.

2️⃣ Експорт функції (Exporting a Function)

Це поширений патерн, коли ви хочете, щоб ваш модуль працював як утиліта або сервіс. Цей підхід простий і ефективний, коли модуль потребує лише одну функцію для експорту.

Приклад:

// greet.js  
module.exports = (name) => `Hello, ${name}!`;
const greet = require('./greet');  
console.log(greet('Alice')); // Виведе: Hello, Alice!

Цей патерн добре підходить для утилітних модулів, де основна функціональність інкапсульована в одну функцію. Крім того, зазвичай цей патерн комбінується з Іменованими експортами (Named Exports), що дозволяє експортувати основну функціональність модуля та інші утиліти, пов'язані з ним.

3️⃣ Експорт конструктора (Exporting a Constructor)

Коли вам потрібно створювати кілька екземплярів об'єкта з однаковою поведінкою, експорт конструктора — чудовий патерн. Це дозволяє створювати нові об'єкти на основі одного й того ж прототипу.

Приклад:

// User.js  
function User(name, age) {  
 this.name = name;  
 this.age = age;  
}  
User.prototype.getDetails = function() {  
 return `${this.name}, ${this.age} years old.`;  
};  
module.exports = User;
const User = require('./User');  
const user1 = new User('Alice', 30);  
console.log(user1.getDetails()); // Виведе: Alice, 30 years old.

Цей патерн ідеально підходить для створення об'єктів з спільними методами та властивостями. Ви можете помітити, що він дуже схожий на звичайний підхід з класами 😁!

4️⃣ Експорт екземпляра (Exporting an Instance)

Цей патерн передбачає експорт єдиного екземпляра об'єкта, що може бути корисним, коли ви хочете зберігати стан усього додатку.

Він схожий на Патерн Singleton, але не гарантує, що в усьому додатку буде лише один екземпляр (оскільки різні модулі все ж можуть імпортувати різні екземпляри).
Ви можете дізнатися більше про це в моєму нещодавньому пості на LinkedIn: https://www.linkedin.com/posts/john-o-dev_nodejs-javascript-typescript-activity-7278364026395348992-GDLJ

Приклад:

// config.js  
const config = {  
 appName: 'MyApp',  
 version: '1.0.0'  
};  
module.exports = config;
const config = require('./config');  
console.log(config.appName); // Виведе: MyApp

Цей патерн широко використовується для конфігураційних модулів або спільних ресурсів, які не потрібно змінювати в різних частинах додатку.

🔍 Висновок

Розуміння цих патернів є важливим для організації та масштабування ваших проектів на Node.js.

Патерни Іменований експорт (Named Exports) та Експорт функції (Exporting a Function) відмінно підходять для модульних утилітних функцій, а патерни Експорт конструктора (Exporting a Constructor) та Експорт екземпляра (Exporting an Instance) дозволяють створювати більш складний об'єктно-орієнтований дизайн.

Вибір патерну залежить від природи вашого модуля і того, як він буде використовуватись у додатку.

З цими патернами у вашому арсеналі ви зможете писати чистіший та легший для підтримки код на Node.js.

Перекладено з: 🚀 Mastering Module Definition Patterns in Node.js

Leave a Reply

Your email address will not be published. Required fields are marked *