2009-03-06 5 views
1

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

Вот пример:

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

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

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

Любые предложения?

ответ

0

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

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

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

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

+0

@ Vlad - Спасибо за проверку реальности. Это, несомненно, правильный выбор! – PartialOrder

Смежные вопросы