Determinação da classe e Colaboradores Responsabilidade
-
03-07-2019 - |
Pergunta
Eu estou usando ActiveRecord para manter as informações sobre os usuários. A classe Usuário tem a carga esperada (), insert (), update () e delete () métodos, setters, getters e alguns outros. Mas eu estou tendo problemas para decidir se deve ou não alguns outros métodos devem ser incluídos na classe User, ou manipulado por colaboradores.
Aqui está um exemplo:
Existem várias transações que um usuário pode solicitar que requerem confirmação. Isso é tratado de uma forma convencional - o envio de um e-mail para o usuário com um link; clicando nos links confirma que o usuário, de fato, quer a realização da operação. Um hash da chave de verificação e da data de expiração / hora persistem como parte do registro do usuário.
Onde devo desenhar a linha neste processo? Deve haver um colaborador que a verificação alças (por exemplo, tomando a chave de verificação de texto simples da string de consulta e aceitar um objeto Usuário como um param)? Ou isso deve ser tratado internamente pela classe do usuário (passando a chave de verificação de texto simples em uma chamada de método)?
A próxima coisa que poderia acontecer após a verificação, é claro, é que a operação continue exigindo uma atualização para o registro ativo -. E ali, parece-me, a classe O usuário deve ter a responsabilidade
Todas as sugestões?
Solução
Você deve delegar essa tarefa a um colaborador, que administra uma mesa confirmations
.
Você usaria o modelo Confirmation
para rastrear todos os requisitos de confirmação. O modelo vai pertencer a User
, bem como administrar o hash confirmação e a acção-a-ser-confirmada (por exemplo activate_account
, change_password
ou change_email
etc.).
O controlador Confirmation
seria responsável pela validação da hash de confirmação e de um encadeamento a acção apropriada no modelo adequado (por exemplo activate_account
-> user.activate()
, change_password
-> user.setPassword()
etc.) e remover o Confirmation
da tabela de confirmations
após a conclusão <. / p>
Isto irá permitir uma melhor separação da lógica, bem como permitir que você dimensionar melhor, por exemplo, para entreter mais de um pendente de confirmação para um determinado usuário (confirmação por exemplo a alteração de senha e de confirmação para a mudança outra coisa.)