Принципы SOLID - лучшие практики

RedDeveloper
05.01.2023 11:19
Принципы SOLID - лучшие практики

Принципы SOLID - лучшие практики

"Ожидается, что программное обеспечение будет модульным, удобным в использовании, обслуживаемым и отвечающим требованиям".

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

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

Некоторые симптомы нарушения SPR:

  • Коллизия в управлении изменениями - Конфликт кода.
  • Побочный ущерб - внесенные изменения имеют множество последствий.
  • Громоздкие классы - ненужные дополнительные методы могут переполнить класс.

Принцип открытости-закрытости (OCP) - Открыт для расширения, но закрыт для модификации. Возможность расширить поведение без изменения существующего кода. Например: использование интерфейса.

Некоторые симптомы нарушения OCP:

  • Влияет на стабильность кода - повторное тестирование, повторное развертывание требует времени.
  • Сложность кода - код становится неуправляемым.

Принцип подстановки Лискова (LSP) - если для каждого объекта o1 типа S существует объект o2 типа T такой, что для всех программ P, определенных в терминах T, поведение P не изменяется при замене o1 на o2, то S является подтипом T - Барбара Лисков. : ).

Т.е. экземпляры производного класса должны использоваться через интерфейсы его базового класса без того, чтобы объекты базового класса могли различать различия. Это может быть достигнуто путем разделения кода в отдельных интерфейсах таким образом, чтобы он следовал LSP. По сути, это помогает создать хорошую структуру наследования.

Некоторые симптомы нарушения LSP:

  • Базовые классы и объекты базовых классов должны знать о своих подклассах.

Принцип разделения интерфейсов (ISP) - Объекты не должны быть вынуждены реализовывать интерфейс, который они не используют. Вместо одного большого интерфейса он должен состоять из более мелких интерфейсов, основанных на группах методов, каждый из которых обслуживает один подмодуль. Т.е. при создании объекта интерфейса не должно быть неиспользуемого метода.

Некоторые симптомы нарушения ISP:

  • Дизайн не является модульным.
  • Одно изменение может повлиять на все.

Принцип инверсии зависимостей (DIP) - политика высокого уровня не должна зависеть от деталей низкого уровня. Зависит от абстракции/интерфейса, а не от конкретных классов.

Некоторые симптомы нарушения DIP:

  • Код становится переполнен деталями реализации.
  • Новые функции в существующей структуре приводят к изменению существующей структуры.
"Любой дурак может написать код, понятный компьютеру, но хорошие программисты пишут код, понятный людям". - Мартин Фаулер.
Некоторые симптомы нарушения DIP
Стоит ли изучать 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 называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип предназначен для представления неделимого значения.