Ответ
Оба принципа направлены на декомпозицию и организацию кода, но они применяются на разных уровнях абстракции.
SRP (Single Responsibility Principle — Принцип единственной ответственности)
Это один из пяти принципов SOLID, который применяется на уровне классов или модулей. Он гласит, что у класса должна быть только одна причина для изменения.
- Уровень: Микроуровень (дизайн классов).
- Цель: Уменьшить связанность кода внутри класса. Если класс отвечает и за бизнес-логику, и за сохранение в базу, и за логирование, то изменение в любом из этих аспектов потребует изменения класса.
Пример нарушения SRP:
class Report:
def get_data(self): ...
def format_as_json(self): ... # Ответственность 1: форматирование
def save_to_file(self, filename): ... # Ответственность 2: сохранение
Правильное применение SRP:
class Report:
def get_data(self): ...
class ReportFormatter:
def format_as_json(self, report): ...
class ReportStorage:
def save_to_file(self, filename, formatted_report): ...
SoC (Separation of Concerns — Разделение ответственностей)
Это более общий и высокоуровневый архитектурный принцип. Он предлагает разделять систему на части, каждая из которых решает свою глобальную задачу («concern»).
- Уровень: Макроуровень (архитектура системы).
- Цель: Организовать всю систему в виде независимых, слабо связанных блоков.
Примеры реализации SoC:
- MVC (Model-View-Controller): разделение данных (Model), их отображения (View) и логики управления (Controller).
- Трехслойная архитектура: разделение на слой представления (UI), слой бизнес-логики (Business Logic) и слой доступа к данным (Data Access).
- Разделение на Frontend и Backend в веб-приложениях.
Ключевое различие
SRP — это конкретное правило для проектирования классов. SoC — это общая стратегия для проектирования всей системы.
Можно сказать, что SRP является одним из способов реализации SoC на низком уровне.