Принцип единой ответственности гласит, что любой программный объект (класс, метод) должен иметь только одну возложенную на него ответственность. Если вы сомневаетесь в том, следует ли вам изменить код класса или метода, единственное, что вам нужно сделать, это задать следующие два вопроса, и если ответ да, то вам нужно изменить этот конкретный код класса/код метода. .

  1. Выполняет ли класс или метод более одной процедуры? Если это так, рекомендуется разделить его на два отдельных класса/метода, чтобы каждый из них отвечал за одну задачу.
  2. Эта логика представляет или принадлежит только соответствующему классу? Если нет, вы должны абстрагироваться от этих методов (логики) и поместить или реализовать их в интерфейсах.

Здесь, в выделенном разделе, метод addPagesAndPrint() нарушает принципы SOLID, то есть единую ответственность. Как видите, он выполняет две задачи: обновляет количество страниц в книге и печатает текущие сведения о книге. Эти две задачи должны быть разделены и должны выполняться двумя разными способами, как показано ниже:

С этим разделением мы подходим к следующему вопросу, который проверяет, нарушаем ли мы все еще S SOLID?. Согласно второму вопросу, привязаны ли эти методы addPages() и printBookInfo() к книге? Разумно и полезно ли абстрагировать эти два метода и поместить их в объект более высокого уровня (например, в интерфейс) приложения?

Если в вашем приложении есть такие классы, как статьи, публикации и виды сущностей, которым также нужна возможность добавления страниц, то метод addPages() не должен находиться в этом классе. Потому что тогда это нарушает S из SOLID. Это должно быть размещено в интерфейсе, чтобы все классы Book, Article и Post могли реализовать.

Очевидно, что функция printBookInfo() не должна находиться в этом классе. Потому что должно быть много классов, которым требуется возможность печатать детали своего объекта.

— Удачного кодирования :)