Паттерны проектирования в JavaScript 2026: GoF, SOLID, GRASP с примерами

Паттерны проектирования в JavaScript 2026: GoF, SOLID, GRASP с примерами

вторник, 20 января 2026 г.

В современной разработке на JavaScript невозможно писать качественный и масштабируемый код без понимания классических подходов к проектированию. Три наиболее важных набора идей - это паттерны GoF (Gang of Four), принципы SOLID и GRASP. Они помогают структурировать логику, снижать связанность и делать систему гибкой.

GoF - это 23 классических паттерна, описанных в книге "Design Patterns" 1994 года. В JavaScript многие из них реализуются проще благодаря динамической типизации, замыканиям и классам ES6.

Самые популярные GoF-паттерны в JS:

Пример Singleton в современном JavaScript:



const Singleton = (function () {
  let instance;

  function createInstance() {
    const obj = { name: "Единый экземпляр" };
    return obj;
  }

  return {
    getInstance: function () {
      if (!instance) {
        instance = createInstance();
      }
      return instance;
    }
  };
})();

const s1 = Singleton.getInstance();
const s2 = Singleton.getInstance();
console.log(s1 === s2); // true

Принципы SOLID помогают писать поддерживаемый объектно-ориентированный код. Они особенно полезны в крупных проектах и при использовании TypeScript.

Пример нарушения и соблюдения SRP:



// Нарушение SRP
class UserService {
  createUser(data) { /* ... */ }
  sendEmail(user) { /* ... */ }
  saveToDatabase(user) { /* ... */ }
}

// Соблюдение SRP
class UserRepository {
  save(user) { /* ... */ }
}

class EmailService {
  sendWelcome(user) { /* ... */ }
}

class UserService {
  constructor(userRepo, emailService) {
    this.userRepo = userRepo;
    this.emailService = emailService;
  }
  createUser(data) {
    const user = /* создание */;
    this.userRepo.save(user);
    this.emailService.sendWelcome(user);
  }
}

GRASP (General Responsibility Assignment Software Patterns) - это набор рекомендаций, как правильно распределять обязанности между объектами. Они дополняют GoF и SOLID.

Основные GRASP-принципы:

Пример Information Expert + Creator в JS:



class Order {
  constructor(customer, items) {
    this.customer = customer;
    this.items = items;
  }

  getTotal() {
    return this.items.reduce((sum, item) => sum + item.price, 0);
  }
}

class Customer {
  constructor(name) {
    this.name = name;
    this.orders = [];
  }

  placeOrder(items) {
    const order = new Order(this, items); // Creator
    this.orders.push(order);
    return order;
  }

  getTotalSpent() {
    // Information Expert
    return this.orders.reduce((sum, order) => sum + order.getTotal(), 0);
  }
}

Осознанное применение GoF, SOLID и GRASP делает код чище, тестируемее и готовым к изменениям. В JavaScript особенно важно сочетать эти идеи с функциональным подходом и модульностью.

Fullstack-разработчик в Москве
Александр
Fullstack-разработчик в Москве

Профессиональная разработка веб-приложений на Node.js с использованием современных frontend и backend фреймворков. Создание, продвижение, поддержка и обслуживание сайтов. Эффективно, прибыльно.