Освоение принципов SOLID в JavaScript: Пошаговое руководство

RedDeveloper
18.01.2023 09:58
Освоение принципов SOLID в JavaScript: Пошаговое руководство

Принципы SOLID в JavaScript

SOLID - это аббревиатура пяти принципов проектирования в объектно-ориентированном программировании и разработке программного обеспечения. К ним относятся:

Photo by Austin Distel on  Unsplash

Принцип единой ответственности (SRP): класс должен иметь только одну причину для изменения. Другими словами, у него должна быть только одна ответственность.

class User {
    constructor(name, email) {
        this.name = name;
        this.email = email;
    }

    getName() {
        return this.name;
    }

    setName(name) {
        this.name = name;
    }

    getEmail() {
        return this.email;
    }

    setEmail(email) {
        this.email = email;
    }
}

Принцип открытости-закрытости (OCP): Класс должен быть открыт для расширения, но закрыт для модификации. Это означает, что поведение класса должно иметь возможность быть расширено без модификации самого класса.

class Shape {
    area() {
        throw new Error("Area method should be implemented")
    }
}

class Circle extends Shape {
    constructor(radius) {
        this.radius = radius;
    }

    area() {
        return Math.PI * this.radius ** 2;
    }
}

Принцип замещения Лискова (LSP): Подкласс должен иметь возможность заменить свой суперкласс, не влияя на корректность программы.

class Bird {
    fly() {
        console.info("Bird is flying");
    }
}

class Ostrich extends Bird {
    fly() {
        throw new Error("Ostrich can't fly");
    }
}

Принцип разделения интерфейсов (ISP): Клиент не должен быть вынужден реализовывать интерфейс, который он не использует. Это означает, что интерфейсы должны быть разделены на более мелкие, более конкретные интерфейсы.

interface Flyable {
    fly();
}

interface Walkable {
    walk();
}

class Bird implements Flyable, Walkable {
    fly() {
        console.info("Bird is flying");
    }

    walk() {
        console.info("Bird is walking");
    }
}

Принцип инверсии зависимостей (DIP): Модули высокого уровня не должны зависеть от модулей низкого уровня, но оба должны зависеть от абстракций. Это означает, что код должен зависеть от абстракций (интерфейсов), а не от конкретизаций (классов).

class Database {
    constructor(adapter) {
        this.adapter = adapter;
    }

    save() {
        this.adapter.save();
    }
}

class MongoDBAdapter {
    save() {
        console.info("Saving to MongoDB");
    }
}

class MySQLAdapter {
    save() {
        console.info("Saving to MySQL");
    }
}

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

Mastering SOLID Principles in JavaScript: A Step-by-Step Guide was originally published in The Javascript

on Medium, where people are continuing the conversation by highlighting and responding to this story.
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?

20.08.2023 18:21

Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в 2023-2024 годах? Или это полная лажа?".

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией

20.08.2023 17:46

В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.

Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox

19.08.2023 18:39

Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в частности, магию поплавков и гибкость flexbox.

Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest

19.08.2023 17:22

В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для чтения благодаря своей простоте. Кроме того, мы всегда хотим проверить самые последние возможности в наших проектах!

Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️

18.08.2023 20:33

Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий их языку и культуре.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL

14.08.2023 14:49

Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип предназначен для представления неделимого значения.