Ir para conteúdo

Arquivado

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

caio wind

[Resolvido] sistema em mvc

Recommended Posts

Olá gente, eu to com uma duvida aqui que me deixa confuso ainda, ja pesquisei em varios lugares e ainda não consegui entender.

 

Como é jeito ideal de usar MVC ?

 

eu sei para que serve, mas ainda não consigo entender o jeito de utilizar ele,

 

 

eu tenho que criar um model, view e um controller pra cada pagina?

 

 

vi em alguns lugares que tem que criar um model para os models, alguem poderia me explicar um pouco melhor sobre isso, e se puder algum exemplo basico.

 

 

Obrigado

 

:(

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você não precisa criar um model para cada página(controller/view), você cria um model para clientes vamos supor, dentro deste model você cria os métodos pertinentes ao cliente vou dar um exemplo besta:

 

model/m_cliente.php

getClient($id){
$qry = mysql_query("SELECT * FROM cliente WHERE id = {$id}");
return mysql_fetch_assoc($qry);
}

 

controller/c_cliente.php

cliente($id){
$view = new View(); // supondo que já exista isso
$cliente = new Cliente();

$resCliente = $cliente->getClient($id); // resgata os dados do cliente no model

$view->load('v_cliente.php', $resCliente); // chama a view e passa os dados trazidos do model para a view em si 
}

 

Então na view, voce trataria esses dados e exibiria para o usuário:

view/v_cliente.php

foreach($resCliente as $k=>$v){
echo $k . ' - ' . $v . '<br>';
}

 

Seria algo parecido com isso, perceba que na view não existe nenhuma operação com o banco(mysql_...) e no controller nao existe nenhum echo, a view fica a cargo de imprimir os valores(echo) o controller por chamar a view e o model, e o model em assim por buscar os valores no banco de dados e retornar para o controller.

 

Conseguiu entender o conceito ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

hum entendi sim,

 

mas no caso se fosse colocar por exemplo empresas

 

eu criaria um :

 

model/m_empresa.php

controller/c_empresa.php

view/v_empresa.php

 

então pra cada pagina eu vou criar um model / um view / um controller ?

 

seria assim?

 

a outra coisa, eu tenho que criar a classe em model certo? no controller preciso criar uma classe tambem ou nao?

Compartilhar este post


Link para o post
Compartilhar em outros sites

O MVC é essencialmente uma arquitetura voltada pra a orientação a objetos, primeiramente desenvolvido para a linguagem SmallTalk, que funciona um pouco diferente das linguagens web.

Porém nada impede você de construir uma camada de controle procedural.

 

Em qualquer linguagem web, muito da camada de controle acaba sendo função do próprio navegador, o que confunde bastante, ainda mais no início. Eu hoje, depois de 1 ano e meio estudando isso ainda sou pego de surpresa por certas peculiaridades.

 

Simplisticamente falando, para aplicações web, funciona mais ou menos assim:

 

Model

Cuida da lógica da sua aplicação/site/sistema/whatever (leia-se: acesso a banco de dados, arquivos, definição de entidades).

 

Controller

Cuida da requisição (redirecionar, enviar headers, saber se estamos fazendo um upload de arquivo, saber se temos uma requisição feita via ajax)

 

View

Cuida da exibição e somente da exibição. Entretanto, ela não é totalmente burra, você pode definir algumas regras de apresentação como: 'imprimir o saldo final em vermelho, caso seja menor que zero'. Como regra, uma View jamais fará uma chamada de funções/métodos de um controller ou de um model.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, a organização das pastas não importa, o conteúdo em si que importa, veja.

<?php
     $ClientesModel = new ClientModel(); // Cria uma nova model
     $ClientesModel->setClientName( '...' ); // Seta o nome
     $ClientesModel->setClientAddress( '...' ); // Seta o endreço 
     $ClientesDataObject = new ClientesDataObject(); // Cria um objeto responsável por todas as transações com o banco de dados
     $ClientesDataObject->insert( $ClientesModel ); // grava o cliente no banco
     $ClientesView = new ClientesView(); // Cria uma nova view
     $ClientesView->getRegistrationStatus( $ClientesDataObject ); // recupera a resposta, se cadastrou ou não 

No teu clientes DataObject, você tem que ter uma propriedade acessível, no qual vai deixar a resposta pro View resgatar.

Então, no view, você faz sua div decorada, sei lá, o view só trata de exibir o que aconteceu pro cliente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

model/m_empresa.php

controller/c_empresa.php

view/v_empresa.php

 

então pra cada pagina eu vou criar um model / uma view / um controller ?

Sim isso mesmo, só a questão do model (em alguns casos) você cria uma classe unica para o projeto inteiro(CRUD_model.php).

 

a outra coisa, eu tenho que criar a classe em model certo? no controller preciso criar uma classe tambem ou nao?

Voce tem que criar uma classe no model e no controller, vide a explicação do rick acima.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não !!!

Seus models apenas vão implementar métodos getters, e setters, no seu DAO, você utiliza os getters para recuperar a informação passada pelo cliente !

 

agora me confundi um pouco, esse DAO seria o o mesmo que esse crud?

 

outra coisa, eu usaria herança quando for estruturar os dados em mvc?

 

 

:huh:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esquece herança cara, o DAO é Data Access Object, é um objeto responsável por manipular as requisições de entrada e saída do banco de dados

Por exemplo, clientes DAO, você vai ter um DAO apenas pra manipular a tabela de clientes, ou seja, fazer todas as inserções, alterações, remoções necessárias

nessa tabela, captou ?

 

^_^

Compartilhar este post


Link para o post
Compartilhar em outros sites

Apenas complementando então a resposta do Andrey(se eu estiver errado me corrija :P), você teria uma DAO para cada tabela do banco de dados, ou seja:

 

Se o seu banco tivesse 3 tabelas: clientes/pedidos/produtos.

 

Voce teria 3 models +- igual o exemplo abaixo:

class Clientes extends DAO {
  protected $table = 't_cliente';

  // os métodos getters e setters que o Andrey mencionou...
  function getNome(){}

  function setNome(){}
  ...
}

 

Agora apenas uma perguntinha fora do escopo do tópico, nesse caso estariamos trabalhando com datamapper ? :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Depois que você fizer o seu MER já vai dar pra saber exatamente quais MODELS criar.

 

Geralmente eu utilizo a seguinte sintaxe para meus Models.

 

UsuarioModel - Todos os dados que tem haver com usuários.

NoticiaModel - Todos os dados que tem haver com notícias.

 

E assim sucessivamente. Depois eu crio os VIEWS, faço 1 view para cada tipo diferente de tela que o meu sistema vai ter.

Testo cada uma delas separadamente e SEM os dados REAIS.

 

E por último faço os CONTROLLERs, para criar as ligações MODEL - View. Geralmente costumo pensar nos controllers sendo as páginas

e os métodos sendo a ação.

 

Ai na sua URL poderia ter algo do tipo

index.php?controller=Usuario&metodo=Cadastrar

 

Onde sua index.php instanciaria o objeto controller e chamaria o método desse objeto.

 

 

Espero ter ajudado em alguma coisa...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Andrey, então usei herença ali porque pensei em criar na classe DAO, um método de conexao (construtor) e dois metodos openDB e closeDB, eu abriria a conexao so herdando as propriedades

 

class Clientes extends DAO {

  public function __construct() {
    parent::__construct();
  }

}

 

Como você tava pensando em fazer andrey? porque se abrir as conexões em cada model ficaria estranho, ter que escrever em todas as classes um metodo de conexao...

 

:thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você usa o DAO, não ele usa você.

Você simplesmente, inclui o arquivo, e faz a instância do banco de dados, no construtor do DAO.

Então depois, no construtor da classe Clientes, você faz a instância do DAO

^_^

Compartilhar este post


Link para o post
Compartilhar em outros sites

alguem pode resumir isso tudo pra mim? devo ou não usar heranças ?

 

hum eu entendi em relação a tudo isso, só uma coisa que ainda não consegui entender, é como se deve estruturar isso,

 

por exemplo eu tenho a pagina clientesView, nela eu chamo o clientesController, e o controller chama o clientesModel?

 

seria assim?

 

:mellow:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na view clientes, você chama um metodo(ação) do controller: clientesController :P

 

Andrey, então da certo assim também, mas qual a melhor forma de se usar então com extends ou apenas fazendo o include ?

 

:P

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na view clientes, você chama um metodo(ação) do controller: clientesController :P

 

Andrey, então da certo assim também, mas qual a melhor forma de se usar então com extends ou apenas fazendo o include ?

 

:P

 

essa é minha duvida tambem, uso include ou extends?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal,

 

Também estou querendo fazer um sistema utilizando o padrão MVC. Achava que estava fazendo corretamente, mas lendo esse tutorial surgiram algumas dúvidas.

 

Minha estrutura de diretório é essa:

/classes - Com as mihas entidades, como POJOs do Java

/model - métodos salvar, validar login, editar, carregar, excluir, etc. Todos esse métodos chamam seus correspondentes das calsses DAO

/dao - classes com acesso ao bd, comandos sql para cada tablea, insert, update, etc.

/controller - AQUI ESTA MINHA DUVIDA

/view - MINHA DUVIDA

 

Seguindo minha estrutura de diretorios, classes e arquivos, quais metodos e funções entrarima nos dos ultimos diretorios?

Por exemplo, na hora de fazer login no sistema, eu chamaria o arquivo controller/c_usuario ou view/v_usuario?

 

Estou mei perdido nessa parte, de como chamar o controller e o view e mostrar na tela, ao mesmo tempo validar, etc.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal,

 

Só pra ver se eu entendi.

Um exemplo básico: LOGIN

 

Eu vou ter um arquivo login.php, que apenas pega os dados do formulario, valida e manda para um controlador. Esse controlador apenas pega esses dados e repassa para a camada de modelo. O modelo valida os dados no BD e retorna o resultado para o controlador. se estiver tudo ok, o controlador pode redirecionar o usuario para uma pagina home, por exemplo, se estiver errado os dados de login, o controlador mostra uma mensagem de erro ou joga o usuario na tela de login de novo, é isso?

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.