Когда разумно нарушать принцип единой ответственности? - PullRequest
3 голосов
/ 29 июля 2011

После рефакторинга некоторых классов сервисного уровня в нашем веб-приложении java я спрашивал себя, в какой момент разумно прекратить придерживаться принципа единой ответственности (SRP) и сохранить поддерживаемость и удобочитаемость кода. Теперь я спрашиваю вас о вашем опыте с этой проблемой.

Пример:

Предполагается, что класс UserManager выполняет следующие действия:

  1. находит пользователей из базы данных
  2. создает новых пользователей
  3. манипулирует существующими пользователями

Случай A: Каждая из этих трех обязанностей состоит из нескольких методов, которые выполняют свои задачи.

→ Для меня было бы ясно разделить его на три класса.

Случай B: Каждая из этих трех обязанностей состоит только из одного метода.

Что бы вы предложили в этом случае? Следует ли разделить его на три крошечных класса или оставить в классе UserManager?

1 Ответ

4 голосов
/ 29 июля 2011

По моему мнению, SRP, связанный с ООП, означает, что состояние и поведение, относящиеся к определенному объекту или объекту, должны находиться в одном классе.Таким образом, я считаю, что вы хотели бы хранить все методы, относящиеся к пользователям, в одном классе, независимо от того, сколько существует методов или сколько нужно для выполнения конкретной задачи.

Суть SRP(как я понимаю), чтобы убедиться, что у вас нет доменных объектов, манипулирующих друг другом.Другими словами, если у вас (гипотетически) был другой класс с именем AccountManager, то в этом классе не должно быть никаких операций, которые напрямую манипулируют объектом User - это нарушит SRP.Скорее класс AccountManager должен был бы полагаться на класс UserManager для обработки любых / всех пользовательских манипуляций.

...