Принцип единой ответственности (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.20.08.2023 18:21
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в 2023-2024 годах? Или это полная лажа?".
20.08.2023 17:46
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
19.08.2023 18:39
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в частности, магию поплавков и гибкость flexbox.
19.08.2023 17:22
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для чтения благодаря своей простоте. Кроме того, мы всегда хотим проверить самые последние возможности в наших проектах!
18.08.2023 20:33
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий их языку и культуре.
14.08.2023 14:49
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип предназначен для представления неделимого значения.