Определение ответственности класса и коллабораторов - PullRequest
1 голос
/ 06 марта 2009

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

Вот пример:

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

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

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

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

1 Ответ

0 голосов
/ 06 марта 2009

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

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

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

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

...