Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sebastiao Marcos

MVC - Desenrolando se

Recommended Posts

Pessoal sou desenvolvedor web, já fiz alguns sistemas e estou agora correndo atrás de melhoramentos para os mesmos, então eu vi uma nova possibilidade de melhorar e programar sites igual aos gamers se me entendem bem separando parte a parte

Off topic Não sei se estou postando na área correta se estiver errado peço a algum moderador que corrija e perdoe meu erro.

 

então conheci MVC as três camadas de desenvolvimento se bem entendi é um padrão de desenvolvimento certo?, comecei a estudar assisti alguns videos no youtube então.

Estou a fazer um sistema em PHP, que tem integração com ajax,

 

entendo que o Model - > é a parte da lógica do negocio

Controller - > Controla o fluxo de dados entre o lógico e o visualizado.

View - > Exibi informações.

 

Desculpem por minha complexidade, se não entenderem tento explicar melhor.

Desde já muito grato a todos. Marquinho.

 

então eu tenho uma aplicação, nela tenho um campo chamado históricos, nele preciso atualizar o campo via ajax,

e lá tenho uma tabela que precisa ser preenchida, o html pode ser gerado no Controller com informações vindas do model e repassado pro view? ou eu posso gerar informações diretas no model e levar-las até o view?

Não entendie essa parte, por que se a view precisa só mostrar dados com o html já pronto, trazendo lhe somente informações do model ou controller, como poderei fazer isso em ajax? já que necessito do mesmo atualizando somente o campo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

o html pode ser gerado no Controller com informações vindas do model e repassado pro view?

Jamais! O Controller não pode ecoar/printar nada para o usuário.

 

ou eu posso gerar informações diretas no model e levar-las até o view?

Tecnicamente é isso mesmo que você vai fazer, mas não diretamente. No meio do caminho você faz baldeação com o Controller e ele sim passa para a View.

 

por que se a view precisa só mostrar dados com o html já pronto, trazendo lhe somente informações do model ou controller

A View não tem TODO o HTML pronto.

 

Toda a marcação, a qual o usuário não vê, já existirá, mas aquilo que vai preencher as lacunas, literalmente ser apresentado ao usuário virá por iterar (normalmente) alguma Variável de Template criada no Controller com os dados da Model.

Compartilhar este post


Link para o post
Compartilhar em outros sites

vamos ver se entendi, antes de tudo quero lhe agradecer pela resposta e que resposta. :D

 

bem, quando estou a enviar informações de minha camada lógica, preciso passar pela camada

de fluxo e então mostrar na camada de visualização.

 

seria meio que algo.

 

Camada model

function logica()
{
retorna "O Resultado de A + B =  " a+b;
}

 

 

Camada Controller

function controller()
{
view->guarde(retorno de logica());
view->index();

}

 

Camada View

function guarde(arg)
{
valor1 = arg;

}

function index()
{
imprima "Os valores de sua operação foram :";
arg;
}

 

tendo por ideia a OO lógico, por que eu entre num conflito de processamento.

se tiver que mandar dados da model para view precisarei mesmo de ter mais processos apenas com o retorno do controller, que faria a mesma coisa que o model.

essa já é uma opinião em certos casos.

 

com ajax farei a mesma coisa certo?

 

Muito obrigado pela resposta clara e rápida.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se eu entendi direito esse seu parágrafo maior, sim.

 

Mesmo se aquilo que a View mostrar for uma página estática, isto é, sem absolutamente nada vindo do banco de dados, ainda assim o Controller vai ter uma tarefaa desempenhar: a de escolher qual Template será mostrado.

 

Supondo um cenário em que todo Controller derive de uma classe chamada Controller e que essa classe tenha uma propriedade com visibilidade protected chamada $view, isso poderia ser ilustrado como:

 

class MeuController extends Controller {

   public function indexAction() {
       $this -> view -> render( 'index.phtml' );
   }
}

Perceba uma pequena diferença nessa abordagem daquela que seu pseudo-código demonstrou.

 

A View não tem um método para cada template. Ela tem um único método que, nas encarnações mais básicas, vai incluir o arquivo informado, utilizando-se do include_path definido:

 

class View {

   // ...

   public function render( $file ) {
       include $file;
   }

   // ...
}

Isso por três motivos:

 

  1. Se a View tivesse um método para cada template a ser exibido ela ficaria ENORME
     
  2. Ela passaria a ser DEPENDENTE de toda sua estrutura, até mesma da hierarquia de diretórios e nomes de arquivo.
     
    Cada atualização, mesmo que só para renomear um arquivo,te forçaria a abrir a View, procurar por toooooodo aquele código monstruoso para alterar.
     
  3. Haveria duplicação de código. No exemplo BEM básico acima, o método render() apenas inclui aquilo que foi passado para ele, independente de existir ou não (o que é um erro, lembre-se disso na hora de implementar).
     
    Se a View tivesse tantos métodos você teria dezenas (ou até centenas) de métodos com corpo idêntico (include), diferenciando-se apenas por seu nome.

Sempre que algo precisar sair do banco de dados, passa pela Model e faz o check-in no Controller.

 

Quando não tiver nada, o Controller nem esquenta e só escolhe qual Template mostrar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpe meu pseudo-código mas a estrutura que tentei mostrar foi essa mesma que você mostrou. :D

No 3° motivo você falou sobre:

3.Haveria duplicação de código. No exemplo BEM básico acima, o método render() apenas inclui aquilo que foi passado para ele, independente de existir ou não (o que é um erro, lembre-se disso na hora de implementar).

 

Se a View tivesse tantos métodos você teria dezenas (ou até centenas) de métodos com corpo idêntico (include), diferenciando-se apenas por seu nome.

 

qual o erro ai, seria o método render apenas incluir o que foi passado ou não verificar a existência do mesmo? ou os dois? desculpe minha ignorância.

 

digamos que eu tenha um campo que precise de atualizações constantes, imagine a caixa de E-mail do Gmail ou Hotmail, elas precisam serem atualizadas direto, isso teria de passar pelo controle se sim como seria o controle iria imprimir o conteúdo vindo do model? somente retornaria? atualizaria alguma variável na view e o ajax buscaria essa variável, estou começando a chegar num ponto interessante, desculpe por tantas perguntas.

 

Desde já muito grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites
qual o erro ai, seria o método render apenas incluir o que foi passado ou não verificar a existência do mesmo? ou os dois? desculpe minha ignorância.

Invariavelmente, você vai ter um include dentro do render(), afinal os Templates são nada mais do que uma macarronada de HTML ao molho PHP ( :sick: ) e precisa ser interpretado.

 

Se usasse file_get_contents() teria o arquivo em forma de texto, sem ser interpretado, logo, nenhum comando PHP nesse Template, como as iterações dos resultados vindos da Model atrav´s do Controller, seria executado.

 

Que bom que você percebeu que UM dos erros é a não verificação de existência. Existem outros problemas que precisam ser corrigidos para garantir a uniformidade da informação, como remover espaços em branco, converter barras (que são diferentes no Windows e nos sistemas *nix), prevenir contra XSS e etc.

 

digamos que eu tenha um campo que precise de atualizações constantes, imagine a caixa de E-mail do Gmail ou Hotmail, elas precisam serem atualizadas direto, isso teria de passar pelo controle se sim como seria o controle iria imprimir o conteúdo vindo do model? somente retornaria? atualizaria alguma variável na view e o ajax buscaria essa variável, estou começando a chegar num ponto interessante, desculpe por tantas perguntas.

O pirralho chato que vai ficar de 5 em 5 minutos perguntando pra aplicação se existem novas mensagens estará no JavaScript.

 

Ele vai fazer uma requisição AJAX que nada mais é do que uma requisição normal, feita pelo protocolo HTTP que o browser usa numa requisição "normal", feita de forma transparente ao usuário.

 

Quando a requisição for feita, você pode (ou não) passar alguns parâmetros GET/POST que o programa vai ler com $_GET ou $_POST como se os dados tivessem vindo manualmente por uma ação do usuário.

 

Vai consultar a Model, passar ao Controller e este para View.

 

Aqui é que pode mudar um pouquinho.

 

Você pode ter duas seções diferentes na sua aplicação, sendo a segunda exclusiva para as requisições AJAX, assim você não precisar retornar ao JavaScript TODO o HTML e sim apenas a informação que importa.

 

Mas também pode usar o HTML "normal", das requisições manuais mesmo. Só que pode ser que a interpretação desse HTML seja mais lenta do que se fosse um JSON, por exemplo.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Aqui é que pode mudar um pouquinho.

 

Você pode ter duas seções diferentes na sua aplicação, sendo a segunda exclusiva para as requisições AJAX, assim você não precisar retornar ao JavaScript TODO o HTML e sim apenas a informação que importa.

 

Mas também pode usar o HTML "normal", das requisições manuais mesmo. Só que pode ser que a interpretação desse HTML seja mais lenta do que se fosse um JSON, por exemplo.

 

Nunca trabalhei com JSON mas, no caso de seções diferentes, você teria um exemplo de como ficaria essas seções na aplicação?

estou chegando lá só mais um pouco e já chegamos.

 

Grato desde já por sua atenção.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hmmmm... Seria bem complicado explicar isso aqui e agora, pois a forma correta envolveria roteamento de URL que pode variar de sistema para sistema.

 

Mas existem outras maneiras mais simples, porém menos corretas, de se fazer:

 

- Dentro do Controller você pode verificar o tipo de requisição recebida. Alguns frameworks JavaScript enviam um cabeçalho HTTP X-Requested-Withcom o valor XMLHttpRequest

 

- Você pode condicionar o output de acordo com algum parâmetro de URL:

 

$this-> view -> assign( 'variavel', $conteudo_do_banco );

if( isset( $_GET['ajax'] ) ) {

   $this -> view -> render( 'ajax.phtml' );

} else {

   $this -> view -> render( 'nonajax.phtml' );
}

E cada template ecoa/mostra da forma mais apropriada.

 

As possibilidades são várias, veja qual a melhor para você.

Compartilhar este post


Link para o post
Compartilhar em outros sites

a solução citada foi a mesma que eu pensei, porém vou pesquisa sobre esse roteamento de URL.

 

seria algo como :

 

o ajax pedir cadastro/busca

busca fazer parte do objeto cadastro e então trazer seus resultados com o html.

 

 

Muito obrigado pela atenção.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.