Разработка пользовательских классов

1

Я работаю над нижеследующими вариантами использования.

  1. Создать пользователя
  2. Удалить пользователя
  3. Обновить пользователя

Теперь я могу спроектировать его двумя способами

  1. Дизайн # 1 - Создание класса UserOperations → Имеет в общей сложности 3 метода, по одному методу для создания, удаления и обновления User.
  2. Дизайн # 2 - создание 3 классов → класс CreateUser, класс DeleteUser и класс UpdateUser.

Согласно SRP (принцип единой ответственности), как и в принципах SOLID, я чувствую, что у нас есть 3 обязанности, которые создают пользователя, удаляя пользователя и обновляя пользователя, и поэтому нам нужно 3 класса, как упомянуто выше в пункте 2.

Пожалуйста, предложите, какой должен быть хороший дизайн - Design # 1 или Design # 2.

  • 0
    Шаблон фабрики или менеджера позволил бы вам использовать дизайн # 1, где управление жизненным циклом является исключительной ответственностью фабрики или менеджера. Конечно, это может быть дизайн # 2 ...;)
  • 0
    создавать , удалять и обновлять поведения (методы). Более целесообразно иметь один класс и один или несколько вспомогательных классов, поддерживающих его, вместо трех классов.
Показать ещё 6 комментариев
Теги:
design
solid-principles
srp

1 ответ

4
Лучший ответ

Хорошо известна проблема определения ответственности. Роберт Мартин предлагает интерпретировать его так:

Принцип единой ответственности (SRP) гласит, что каждый программный модуль должен иметь одну и только одну причину изменения

а также (та же ссылка):

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

В вашем примере изменения бизнес-требований будут касаться не только самого пользователя, а не того, как его управляют с точки зрения деталей реализации. Важная точка зрения заключается в том, что ваше приложение делает для людей, использующих его, а не как оно это делает. Поэтому я также рекомендую первый подход. Обычно используемый шаблон для этого называется The Repository.

  • 0
    Спасибо BartoszKP! Имеет смысл :)
  • 1
    Мое мнение по этому поводу: дизайн № 2 в целом не идет. Вы должны создать класс «UserOperation», который имеет одну-единственную ответственность, а именно «управление пользователями». Не следует преувеличивать при создании разных классов для разных действий над объектом пользователя, поскольку все они отвечают за «пользователя». Это только в дополнение к правильному ответу выше.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню