Определение ответственности класса и коллабораторов

StackOverflow https://stackoverflow.com/questions/619900

Вопрос

Я использую ActiveRecord для хранения информации о пользователях. Класс User имеет ожидаемые методы load (), insert (), update () и delete (), сеттеры, геттеры и некоторые другие. Но мне трудно решить, следует ли включать в класс User некоторые другие методы или обрабатывать их соавторы.

Вот пример:

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

Где мне провести черту в этом процессе? Должен ли быть соавтор, который обрабатывает проверку (например, беря ключ проверки в виде простого текста из строки запроса и принимая объект User в качестве параметра)? Или это должно обрабатываться внутренне классом User (передача открытого ключа проверки в вызове метода)?

Следующее, что может произойти после проверки, конечно, это то, что транзакция будет продолжаться, требуя обновления активной записи, и, как мне кажется, класс User должен нести ответственность.

Есть предложения?

Это было полезно?

Решение

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

Вы будете использовать модель Подтверждение для отслеживания всех требований подтверждения. Модель будет принадлежать User , а также управлять хешем подтверждения и действием, которое будет подтверждено (например, activ_account , change_password или change_email и т. д.).

Контроллер Confirmation будет отвечать за проверку хэша подтверждения и связывание соответствующего действия в соответствующей модели (например, activ_account - > user.activate ( ) , change_password - > user.setPassword () и т. д.) и удалите подтверждение из подтверждений таблица после успешного завершения.

Это позволит лучше отделить логику, а также позволит лучше масштабировать, например, для подтверждения более чем одного ожидающего подтверждения для данного пользователя (например, подтверждение для изменения пароля и подтверждение для изменения чего-либо еще.)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top