Принцип единой ответственности (SRP) и мой класс обслуживания - PullRequest
3 голосов
/ 10 октября 2011

У меня есть класс YoutubeVideoService, который выполняет операции CRUD (создание, чтение, обновление и удаление).На мой взгляд, Create, Read, Update и Delete - четыре причины для изменения класса.Нарушает ли этот класс принцип единой ответственности?

Если он нарушает, то должны быть четыре класса, такие как CreateYoutubeVideoService, ReadYoutubeVideoService, UpdateYoutubeVideoService и DeleteYoutubeVideoService.Разве не слишком много классов?

Ответы [ 3 ]

2 голосов
/ 10 октября 2011

Я думаю, что вы принимаете принцип единой повторяемости до крайности на уровне класса, не принимая во внимание сплоченность.

Если вы следуете по этому маршруту, вы могли бы оправдать наличие множества классов одним или двумя методами, что, в свою очередь, увеличило бы количество зависимостей от неба.

Я думаю, что дух SRP - Упростите как можно больше, но не более .

1 голос
/ 11 июня 2019

Хороший способ измерить согласованность с принципом единой ответственности - это подумать о том, сколько причин изменить этот класс.Если вы можете подумать о более чем одной причине для изменения, возможно, это нарушает SRP.

Единственная причина для изменения класса CRUD , подобного этой, - это изменение базовой структуры данных.Так что это относится к SRP.

С другой стороны, если у вас в этом классе были какие-либо другие операции (например, проверка длины или типа видео перед его вставкой), это нарушило бы SRP, поскольку оно могло изменяться независимоиз уровня постоянства.

SRP не является догмой, поэтому, следуя принципам SOLID , мы всегда должны быть осторожны, чтобы не вводить сложность игл.В соответствии с шедевром Боба Мартина , говоря о том, когда две обязанности должны быть разделены:

Если, с другой стороны, приложение не изменяется таким образом, что вызывает две обязанности кменяются в разное время, нет необходимости их разделять.Действительно, их разделение пахнет ненужной сложностью.(…) Не имеет смысла применять SRP (или любой другой принцип, если на то пошло), если нет симптомов.

0 голосов
/ 10 октября 2011

Как долго должен быть метод?Можно сказать, что нет причин иметь более 2 строк.Но это, конечно, излишне в некоторых ситуациях.То же самое с SRP - вы должны решить, когда достаточно.CRUD выглядит как целостный набор операций, которые идеально подходят для одного класса, потому что они работают с данными одного типа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...