Принцип единой ответственности не так прост!

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

Хотя в то время это не имело большого значения, правильно ли я применял принцип. Мой проект составлял всего 500 LOC, и я не собирался его поддерживать.

Позже, в своей профессиональной карьере, я понял, что пропустил самую важную часть SRP: Инкапсуляцию ответственности!

Позвольте мне взять пример SRP из мира людей. В конце концов, «ответственность» - это метафора! Первоначально применимо к нам, людям!

Аналогия между менеджером и сотрудником

Представьте себе время без компьютеров. Вы сотрудник финансовой компании, и ваша работа - бухгалтерский учет. Обычно ваш менеджер приходит с кучей деталей транзакции и просит вас записать их. Что вы делаете? Итак, вы берете соответствующий файл из шкафа, открываете файл, добавляете записи, закрываете файл и помещаете его обратно в тот же шкаф. Другими словами, вы несете ответственность за поддержание финансовых транзакций. Время от времени менеджер может также попросить вас подсчитать баланс какого-либо владельца счета!

Вы заметили, что вы, как сотрудник, несете ответственность за управление файлами?

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

Тем не менее, я виновен в написании кода ниже,

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

Вместо этого я должен инкапсулировать файловую логику,

Вывод

Чтобы правильно применять SRP, инкапсуляция ответственности столь же необходима, как и единоличная ответственность. Или закончить как этот парень

Из википедии,

Пожалуйста, прокомментируйте, если у вас есть какие-либо предложения. Спасибо за чтение!

Использованная литература: