Рубрики
Без рубрики

S.O.L.I.D: Принцип Единой Ответственности

S.O.L.I.D Часть 1: Принцип Единой Ответственности. Помеченный как ооп, java, шаблон проектирования, твердый.

Принцип S.O.L.I.D (Серия из 2 частей)

Согласно Вики :

В объектно-ориентированном компьютерном программировании SOLID – это мнемоническая аббревиатура пяти принципов проектирования, призванная сделать дизайн программного обеспечения более понятным, гибким и ремонтопригодным.

SOLID – это аббревиатура 5 важных принципов проектирования при выполнении ООП. Впервые он был представлен Робертом К. Мартином ( Дядя Боб ) в его статье 2000 года Принципы проектирования и шаблоны проектирования .

ТВЕРДЫЙ обозначает –

  • S – Принцип Единой Ответственности
  • O – Принцип открытия/Закрытия
  • L – Принцип замещения Лискова
  • I – Принцип разделения Интерфейсов
  • D – Принцип Инверсии Зависимостей

В этой статье я буду освещать S – Принцип единой ответственности . Примечание – Примеры будут на Java, но применимы к любому языку ООП.

У класса должна быть одна и только одна причина для изменения.

В программировании Принцип единой ответственности гласит, что каждый модуль или класс должен отвечать за отдельную часть функциональности, предоставляемой программным обеспечением.

Действие действие/ | пример говорит громче, чем голос

package app.singleResponsibility;

public class Employee {
  private String name;
  private int perHourRate;

  public Employee(String name) {
    this.name = name;
  }

  public String getName() {
      return name;
  }

  public void setPerHourRate(int rate) {
    this.perHourRate = rate;
  }

  public int getPerDayRate() {
    return perHourRate * 8;
  }


  public String markAttendance() {
    return String.format("%s is present", name);
  }
}

А вот и UML-диаграмма для гиков –

Итак, у нас есть очень простой класс Employee с двумя частными атрибутами и несколькими общедоступными методами. На первый взгляд, это выглядит нормально, но на самом деле это нарушение SRP .

Класс Employee имеет дело не только с деталями сотрудника, но также связан с реализацией метода markAttendence . Сейчас у него есть две причины измениться.

Предыдущий пример нарушает закон SRP о единой ответственности. Давайте копнем немного дальше и попробуем исправить класс Сотрудник .

// Employee.java
package app.singleResponsibility;

public class Employee {
  private String name;
  private int perHourRate;

  public Employee(String name) {
    this.name = name;
  }

  public String getName() {
      return name;
  }

  public void setPerHourRate(int rate) {
    this.perHourRate = rate;
  }

  public int getPerDayRate() {
    return perHourRate * 8;
  }
}

Обновленная диаграмма UML для Сотрудника класса –

Мы удалили метод отметить посещаемость из класса Сотрудник , чтобы сделать его совместимым с SRP.

Давайте пойдем дальше и создадим класс Отслеживание посещаемости для работы с посещаемостью.

// AttendanceTracker.java
package app.singleResponsibility;

public class AttendanceTracker {
  private Employee emp;

  public AttendanceTracker(Employee emp) {
    this.emp = emp;
  }

  public String markAttendance() {
    return String.format("%s is present", emp.getName());
  }
}

UML-диаграмма для Отслеживания посещаемости класса

Отслеживание посещаемости класс принимает объект сотрудника в качестве зависимости и отмечает посещаемость этого сотрудника.

Теперь оба класса придерживаются Принципа единой ответственности и это облегчает техническое обслуживание и тестирование.

Чем больше обязанностей (причин для изменения) у класса, тем сложнее будет реализовать некоторые новые функции, а техническое обслуживание станет растущей проблемой, которая будет занимать больше времени по мере роста проекта, усложняя и делая обязанности классов тесно связанными друг с другом.

Поэтому всегда проводите небольшие занятия с одной ответственностью.

Мир! Если у вас есть какие-либо вопросы или отзывы, пожалуйста, не стесняйтесь оставлять комментарии ниже.

Принцип S.O.L.I.D (Серия из 2 частей)

Оригинал: “https://dev.to/linuxnerd/s-o-l-i-d-single-responsibility-principle-3m4g”