Ir para conteúdo

Arquivado

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

Blnrj

Alteração e exclusão com classes

Recommended Posts

Estava vendo o artigo "Construindo uma Arquitetura de Desenvolvimento em PHP 5" e vi que é bem útil.

Então peguei o código e estou tentando estudar.

 

Tenho duas funções abaixo. Uma que cadastra e outra que mostra todos os registros.

Preciso ter uma que atualize um registro, e outra que exclua um registro.

 

Alguém pode me dar uma ajuda. Não consigo sair do lugar.

 

Obrigado a todos.

 

function cadastrar() {	 $banco = new BancodeDados("../../../sistema/siscliente/conexao.xml");	 $sessionFacade = new SessionFacade($banco);	 try {		$banco->conecta();		$cliente = new Cliente();		$cliente->setNome($_POST["nome"]);		$cliente->setTelefone($_POST["telefone"]);		$cliente->setEndereco($_POST["endereco"]);		$cliente->setEmail($_POST["email"]);		$sessionFacade->inserirCliente($cliente);		$banco->desconecta();		header("location: cadastros.php?msg=OPERAÇÃO REALIZADA COM SUCESSO");	 } catch(Exception $e) {		$banco->desconecta();		header("location: cadastros.php?msg=".$e->getMessage());	 }}function mostrarClientes() {	 $banco = new BancodeDados("../../../sistema/siscliente/conexao.xml");	 $sessionFacade = new SessionFacade($banco);	 try {		$banco->conecta();		$_SESSION["clientes"] = $sessionFacade->recuperarClientes();		$banco->desconecta();		header("location: mostrarClientes.php");	 } catch(Exception $e) {		$banco->desconecta();		header("location: mostrarClientes.php?msg=".$e->getMessage());	 }}

Compartilhar este post


Link para o post
Compartilhar em outros sites

então cara, eu não sou muito fã deste artigo, mas se eu não me engano, esses métodos que voce quer fazer são pertinentes ao pattern SessionFacade ...

 

Faz um bom tempo que eu não leio sobre o facade, para falar a verdade, li uma vez só, mas se eu não me engano, a finalidade deste pattern é criar um mapeamento relacional entre o objeto e o banco e armazenar toda a lógica do negócio, então o procedimento é o mesmo de inserirCliente, só que no caso de alterar, voce teria um UPDATE, e no caso de deletar um DELETE (tanto quanto sugestivo neah) dentro da classe DAO.

 

Não sou de postar códigos cara, mas posso te ajudar a construir os métodos, poste no forum oque voce começou e onde parou para agilizar !

 

Ja que voce esta lendo esse tutorial, da uma olhada aqui http://www.imasters.com.br/artigo/4722/php...p_5_-_parte_04/ e sobre o momento em que ele cria os objetos DAO ...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso.Já trabalho um tempo e tentei incluir o update e o delete. Tipo: where id='$id', mas acontece que ele não funcionou. Não consegui dizer qual é o regitr que quero realizar a operação. Começei a achar que o problema é que tenho que chamar esse update ou delete de forma diferente. Diferente do usual, por ser orientado a objeto. Vou reler o artigo. (Ja li ele todo).Mas obrigado pela atenção.Abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

então blnrj (eita nick complicado) hehehe ...seguinte ... eu li rapidamente o artigo todo, e vi q ele segue o padrão MVC nesse tutorial ...Então nós temos a SessionFacade que é a nossa principal classe de controle ...E também temos os nossos objetos DAO que acessam diretamente o banco de dados!No seu caso, eu criaria um método no objeto DAO chamado, sei la, alterarCliente();(Devidamente Camelizado :D) e excluirCliente();E a SessionFacade seria responsável por validar os atributos antes de instanciar um objetoDAO para acessar o banco de dados ...Para facilitar, voce até poderia reescrever os comandos DML na classe que voce utiliza para abstração com o Banco de Dados ...se estiver complicado, eu crio um exemplozinho de alterar/excluir aqui !

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, seguinte ... vou mostrar só o comecinho, voce pega o resto (hehehhheh http://forum.imasters.com.br/public/style_emoticons/default/devil.gif )

 

brincadeiras a parte ....

 

vamos la, a nossa classe de controle, SessionFacade{}

mantenha a estrutura dela a mesma, só adicione este código

 

//obrigatória passagem de um objeto do tipo cliente public function alterarCliente(Cliente $cliente) { // iniciando bloco try catchtry {// dentro deste bloco vem toda a lógica, o tratamento de dados antes do updateif($cliente->getNome() == NULL) { throw new Exception("O NOME É UM CAMPO OBRIGATÓRIO"); } if($cliente->getTelefone() == NULL) { throw new Exception("O TELEFONE É UM CAMPO OBRIGATÓRIO"); } if($cliente->getEndereco() == NULL) { throw new Exception("O ENDEREÇO É UM CAMPO OBRIGATÓRIO"); }catch (Exception $e) {//somente para debbug, faça um tratamento de erros melhorzimprint 'ERROR ' . $e->getMessage(); } // Depois das verificações eu instancio um objeto que acessara o banco de dados$clienteDAO = new ClienteDAO(); // Seto o objeto banco para abstração e manipulação dos dados.$clienteDAO->setBancoDados($this->banco); //chamo o novo método da classe DAO$clienteDAO->alterar($cliente); }

 

Na classe ClienteDAO, teremos um novo método, o método responsável por atualizar os dados do cliente

Mantenha a estrutura como esta, e adicione:

 

 

//novamente, o parametro, obrigatoriamente, deverá ser do tipo cliente, devido a indução de tipo!public function alterar(Cliente $cliente){//aqui, não será necessário tratar novamente o cliente enviado por parametro, pois a nossa classe// de controle ja fez isso saca !?$sql = "UPDATE cliente Set " .... bla bla bla ... //pego o banco $banco = $this->getBancoDados(); //e aqui um tratamento de erro bem basicão mesmo ..if(!$banco->updateSQL($sql)) {throw new Exception("ERRO NA QUERY CLIENTEDAO MÉTODO ALTERAR CLIENTE"); }}

 

 

Cara, raramente posto códigos ... mas postei não sei porque :D

 

Adapte o código postado conforme as suas necessidades.

 

É bem capaz que ele esteja errado, pq eu não testei, fui escrevendo, sem pensar !

 

ehehhehe

 

é isso ae !

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi Void.Obrigado pelo código e pela atenção.Sei que simplesmente dar o código pronto pode ser prejudicial ao aprendizado, porém as vezes um exemplo abre um horizonte enorme para quem quer aprender. Facilita entender a abstração necessária e aí, aplicar isso em outros códigos mais complexos. Vou ralar aqui e te dou notícias. De inicio deu erro no Cath, acho que faltava um "{" antes dele. Estou estudando aqui.- - -Uma dúvida.Por que você criou: public function alterarCliente(Cliente $cliente) e não: public function alterarCliente($id) - - -Grande abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, seguinte, boa pergunta ...

 

Uma das sacadas desse pattern mvc é a persistencia de objetos.

 

Pensa comigo, se eu passasse apenas o id na função por parametro, como poderíamos validar as informações do objeto Cliente !?

 

Não sei se voce reparou, mas a validação que a classe de controle faz é em cima das informações do objeto que voce passou por parametro ... como isso seria possível apenas com o id !?

 

Nossa classe SessionFacade não teria utilidade !

 

O esquema é esquecer a forma procedural de pensar, e tentar pensar de outra forma, mesmo ela não sendo OO ...

 

Sacou !?

 

Sobre o seu post, eu concordo com a idéia de que as vezes é necessário postar o código para base

 

Espero que voce continue ralando, e aprendendo cada vez mais, mas lembre-se do velho ditado popular "Não de o peixe, ensine a pescar!"

 

hehehhehehe ... é isso ae ferinha ! Boa sorte!

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.