Pregunta

Estoy usando ActiveRecord para mantener información sobre los usuarios. La clase Usuario tiene los métodos esperados de carga (), inserción (), actualización () y borrado (), configuradores, captadores y algunos otros. Pero estoy teniendo problemas para decidir si ciertos otros métodos deben incluirse en la clase de Usuario o ser manejados por colaboradores.

Aquí hay un ejemplo:

Hay varias transacciones que un usuario puede solicitar que requieren confirmación. Esto se maneja de manera convencional: enviar un correo electrónico al usuario con un enlace; al hacer clic en el enlace se confirma que el usuario desea que la transacción continúe. El hash de la clave de verificación y su fecha / hora de caducidad persisten como parte del registro del usuario.

¿Dónde debo dibujar la línea en este proceso? ¿Debería haber un colaborador que maneje la verificación (por ejemplo, tomando la clave de verificación de texto sin formato de la cadena de consulta y aceptando un objeto Usuario como parámetro)? ¿O debería ser manejado internamente por la clase de Usuario (pasando la clave de verificación de texto sin formato en una llamada de método)?

Lo siguiente que sucedería después de la verificación, por supuesto, es que la transacción continuaría requiriendo una actualización del registro activo, y me parece que la clase Usuario debe ser responsable.

¿Alguna sugerencia?

¿Fue útil?

Solución

Debes delegar esta tarea a un colaborador, que administra una tabla de confirmations .

Usaría el modelo Confirmation para rastrear todos los requisitos de confirmación. El modelo pertenecerá al Usuario , así como a administrar el hash de confirmación y la acción a confirmar (por ejemplo, enable_account , change_password o change_email etc.).

El controlador Confirmation sería responsable de validar el hash de confirmación y de encadenar la acción apropiada en el modelo apropiado (por ejemplo, enable_account - > user.activate ( ) , change_password - > user.setPassword () etc.) y elimine el Confirmation de las confirmations tabla al completar con éxito.

Esto permitirá una mejor separación de la lógica, así como también te permitirá escalar mejor, por ejemplo. para recibir más de una confirmación pendiente para un usuario determinado (diga la confirmación para cambiar la contraseña y la confirmación para cambiar otra cosa)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top