OCP нарушает SRP в Чистой Архитектуре? - PullRequest
1 голос
/ 05 октября 2019

Недавно я читаю «Чистую архитектуру» Роберта Мартина.

У меня есть некоторые недоразумения относительно пары определений принципов SOLID. Точно Принцип Единой Ответственности и Принцип Открытого / Закрытого.

Что касается первого, у нас есть следующее

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

Где причина означает субъект . Звучит довольно ясно.

Переходите к следующему - OCP. Здесь у нас есть такой пример enter image description here

Непонятая часть - это связь Базы данных и Интерактора. Мы реализуем интерфейс Financial Data Gateway в компоненте Database с помощью Financial Data Mapper, поэтому у нас есть два модуля с одной ответственностью. Похоже на нарушение SRP.

Прав ли я или просто что-то упустил для правильного понимания?

1 Ответ

2 голосов
/ 05 октября 2019

Я хотел бы подчеркнуть, что перечисленный подход к проектированию не является ни объектно-ориентированным, ни хорошей архитектурой, чтобы иметь для большинства, если не во всех ситуациях. Здесь - моя статья с более подробной информацией о том, почему это так.

Принцип единой ответственности также имеет множественные, иногда противоречивые толкования. То, что должно означать в объектно-ориентированном контексте, - это в основном сильная сплоченность и слабая связь. Вот моя slidedeck , объясняющая все это с прагматической точки зрения.

Так что, при должном уважении, я думаю, вы можете иметь неправильное представление о SRP, OCP, практичности или жизнеспособности«Чистая архитектура» и объектная ориентация в целом.

После всего сказанного ответ таков: грамматика вашего вопроса неверна. Не существует такого понятия, как «нарушение SRP». SRP очень слабо определен, и даже если вы выберете интерпретацию, это не двоичная вещь. Это шкала, которая сильно зависит от требований и контекста и не может (не должна) оцениваться сама по себе.

...