Para encontrar o agrupamento certo para os controladores, pense nos testes .
(Mesmo que você não faça nenhum teste, pensar em como você testaria seus controladores fornecerá idéias muito boas sobre como estruturá-los.)
Um AuthenticationController
não pode ser testado por si só, porque contém apenas a funcionalidade de logon e logout, mas seu código de teste precisará, de alguma forma, criar contas falsas para fins de teste antes de poder testar um login bem-sucedido. Você pode ignorar o subsistema em teste e ir diretamente ao seu modelo para a criação das contas de teste, mas terá um teste frágil em suas mãos: se o modelo for alterado, será necessário modificar não apenas o código dos testes o modelo, mas também o código que testa o controlador, mesmo que a interface e o comportamento do controlador permaneçam inalterados. Isso não é razoável.
A LoginController
é inadequado pelos mesmos motivos: você não pode testá-lo sem criar contas primeiro, e há ainda mais coisas que não pode testar, como, por exemplo, impedir logons duplicados, mas permitir que um usuário efetue login após o logout. (Como esse controlador não possui funcionalidade de logoff).
Um AccountController
fornecerá tudo o que você precisa para realizar seus testes: você pode criar uma conta de teste e tentar fazer login, você pode excluir a conta e garantir que não pode mais fazer login, alterar a senha e garantir que o senha correta deve ser usada para fazer login, etc.
Para concluir: para escrever até o menor conjunto de testes, você precisará disponibilizar toda a funcionalidade do AccountController
mesmo. Subdividi-lo para controladores menores parece estar gerando controladores deficientes com funcionalidade insuficiente para um teste adequado. Essa é uma indicação muito boa de que a funcionalidade de AccountController
é a menor subdivisão que faz sentido.
E, de um modo geral, a abordagem "pensar no teste" funcionará não apenas nesse cenário específico, mas em qualquer cenário semelhante que você encontrar no futuro.