Bom dia,
A dúvida é a seguinte:
Estou desenvolvendo um projeto em PHP + MySQL + HTML + CSS + jQuery utilizando MVC, minha dúvida está relacionada a onde o jQuery se encaixa, hoje estou tratando assim:
jQuery:
jquery.system.api.js -> Efetua os eventos e ações envio.
jquery.system.funcs.js -> Armazena funções que podem ser chamadas mais de uma vez, exemplo: uma função que inclui mascaras nos campos.
jquery.system.visual.js -> Acima dos mesmo eventos da system.api, mas apenas nas mudanças visuais que os eventos devem causar.
Estrutura de pastas de uma parte:
index.php
callFunctions.php
/view/geral/geral_list_users.php -> A minha dúvida está aqui!!!!
/view/class.geralView.php
/controller/class.geralController.php
/model/class.geralModel.php
/js/arquivos.js
A dúvida é:
Eu chamo o controller através do callFunctions, na classe Controller eu digo o que o model deve fazer -> Buscar os usuário no BD, e passo a array com o resultado para a classe do View, DUVIDA:
Dentro do view eu apenas pego o valor da array, incluo o arquivo geral_list_users.php e faço a listagem dentro desse arquivo, ou seja, uso a classe do View apenas pra incluir o arquivo, está correto isso? seria errado remover essa classe e incluir direto a lista pelo Controller ?
E por fim, onde o jQuery fica no MVC ? minha divisão está correta?
Um projeto Web MVC é diferente dos projetos que existiam na época em que o MVC foi concebido.
Na prática, o MVC da Web deve ser divido em dois MVCs:
MVC do Back-End;
MVC do Front-End.
O MVC do back-end é puramente PHP e baseado em requisições. Nenhuma outra linguagem irá realizar nada no back-end, apenas PHP. Ou seja:
Controller: receberá a requisição HTTP e realizará as tarefas a ele pertinentes;
Model: será consultado pelo controller, caso necessário, e tratará todas as informações lógicas e de negócio. Poderá consultar um storage se necessário.
View: irá gerar todo e qualquer output gerado pelo PHP. Precisa realizar um echo/print? Irá exibir em browser (HTML) ou em linha de comando (texto puro)? É na View.
Uma vez que a View do back-end gerou o HTML, inicia a etapa do MVC do front-end. Esse, por outro lado, é baseado em evento e dividido em algumas linguagens (HTML + CSS + JavaScript). Sendo que a única linguagem de programação é o JavaScript.
Nessa caso, o cenário é um pouco mais complexo que no back-end. Para tanto, é melhor iniciar pela View:
View: é tudo que o usuário pode visualizar. É o composto entre HTML + CSS (que pode ser modificado por JavaScript). Diferentemente do PHP, que espera uma requisição, este espera um evento (seja clicar em botão, passar o mouse sobre algum elemento, apertar uma tecla, etc...). Quando um evento é disparado, ele pode possuir um dos quatro tratamentos abaixo (não limitado a somente um):
Ser capturado pelo HTML: Clicar em um link, submeter um formulário, digitar em text box. São todos os eventos "nativos" ou "padrões" do HTML.
Ser capturado pelo JavaScript: Quando é adicionado um event listener, o JavaScript interceptará o evento e poderá personalizar a ação que deverá ser tomada (veremos mais na parte de controllers).
Ser capturado pelo CSS: São os eventos que o CSS toma controle (:hove, :active, :visited, etc..). São bem limitados, e o controle fornecido é puramente visual;
Não acontecer nada: é, de longe, o evento mais disparado. Clickou em um área em branco, movimentou o mouse pelo site, rolou um scroll. Acredite, tudo isso é um evento que não possui um listener.
Controller: puramente JavaScript. São os listeners adicionados através do JavaScript. Assim como o PHP está esperando uma requisição, o JavaScript espera um evento. Uma vez caputrado, pode-se atribuir novas operações (gerar uma requisição, modificar o HTML/CSS, consultar regras de negócio) ou evitar que uma ação seja realizada (impedir o click em um link ou envio de um formulário).
Model: puramente JavaScript. Igual ao PHP, é aonde estarão as regras de negócio. Pode-se utilizar para executar validações de negócio, requisições assíncronas (AJAX), consultar algum storage local (localStorage, cookies, etc..). Da mesma forma que o PHP realizaria, com a diferença de ser no front-end.
jQuery é uma biblioteca, escrita em JavaScript, que pode ser utilizada pelo MVC do Front-End (Controller e Model) e faz parte da View do Back-End.