Eu só queria alguns conselhos sobre o modo MVC de fazer as coisas. Eu estou usando o codeigniter e queria saber se é melhor ter um controlador por página para um site ou um controlador para todas as páginas?
Digamos que eu tenha um site simples, onde você pode visitar a página inicial, fazer login, criar uma conta e entrar em contato com o administrador.
Seria melhor ter esses controladores: front-end (índice), logon, conta, contato OU ter um controlador chamado front-end ou qualquer outra coisa com as ações como logon, createAccount, contato?
Quando você sabe se é melhor usar um controlador em uma situação?
Respostas:
É melhor ter um controlador por unidade lógica, por exemplo, AccountController (login, registro), PagesController (home, contato), Backend -> PagesController (criar, editar, excluir), UsersController (criar, editar, excluir) e assim por diante.
fonte
@Rushino Você tem dois 'aplicativos' aqui - o front-end (para leitores) e o back-end (para administradores). Para cada grupo de funcionalidade, você tem um controlador.
O login é um grupo desse tipo, que inclui a geração do formulário HTML (os campos, chamando a visualização) e o tratamento do formulário (a validação, conectando-se ao modelo). Portanto, 'login' é um controlador com duas ações - generateForm e handleForm.
O Pages é dividido entre o aplicativo front-end - que apenas mostra as páginas - e o aplicativo back-end que permite editar, excluir, criar e possivelmente exibi-los de uma maneira diferente. A página inicial é "apenas mais uma página" no front-end, pelo que cabe no controlador de páginas. No back-end, sua lógica pode ser diferente o suficiente para justificar a existência de um controlador diferente.
Para usuários - se os usuários puderem se registrar, precisarão de um controlador de front-end, mas, se não, tudo a ver com os usuários ocorre apenas no back-end.
Observe que cada uma das funções de back-end pode exigir um gerador e um manipulador. Porém, essas coisas podem ser divididas em arquivos de configuração, com um plug-in que é um gerador de formulários genérico.
Em resumo, fica assim:
fonte
Eu acho que você deve usar um Controller por unidade de negócios, como OrdersController para todas as operações relacionadas a pedidos e coisas do tipo. Estou ciente de que, nesse caso, os Controladores ficam ENORMES, mas ainda podemos usar classes auxiliares para delegar coisas como inicialização de modelo e classes parciais para espalhar ações em arquivos separados.
Por exemplo, posso ter
Create.cs and OrdersController
arquivos OrdersController List.cs para a classe OrdersController, cada um com o conjunto de ações correspondente. Torna as coisas muito mais limpas e ainda mantém as operações de pedidos centralizadas em uma única classe de controlador.Apenas meus 2 centavos.
fonte
Eu acho que você poderia adotar uma abordagem diferente:
Um controlador principal como porta frontal que fornece solicitação para controladores específicos. Dessa forma, você pode usar esse controlador frontal para verificar coisas comuns, como autenticação do usuário, analítica do Google e outras coisas gerais que você gostaria de fazer e manter a estrutura do MVC pura.
Esta não é minha idéia, mas o Symfony Framework funciona dessa maneira, portanto, posso dizer que, pela minha experiência, essa é uma maneira muito agradável e elegante de implementar um front-end.
fonte