Ir para conteúdo

POWERED BY:

Arquivado

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

Marcelo Garbin

CRUD - Função ou Classe?

Recommended Posts

Boa Tarde pessoal, tudo certo? beleza... :thumbsup:

 

Seguinte, estou desenvolvendo um sistema, e gostaria da ajuda de vocês mais uma vez.

 

A minha dúvida é a seguinte, tenho lá meu formulário(imaginário) com as seguintes opções de Cadastrar, Visualizar, Atualizar e Deletar. Certo?

 

Então, gostaria de saber se é possível e como fazer o seguinte:

 

Usar uma Função ou Classe(não sei programar em OO com PHP) genérica onde eu possa fazer esses comandos e chama-los conforme o sistema.

 

Exemplo um cadastro de usuário: Tenho todos os dados dele preenchidos.. ai só chamo a função Cadastrar(parâmetros); e está feito o cadastro. Essa mesma função gostaria de ocupar por exemplo no Cadastro de produtos, porém só mudando os parâmetros.

 

Teria como eu fazer isso? Se sim, de que forma? algum exemplo?

 

Desde já agradeço a todos pela atenção =)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando eu chegar em casa, lhe mostro um exemplo, mas até lá certamente já apareceu alguém pra te ajudar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando eu chegar em casa, lhe mostro um exemplo, mas até lá certamente já apareceu alguém pra te ajudar.

Show cara, to no trabalho também vou sair daqui a pouco e ficar aguardando essa resposta. Por enquanto muito obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

depende muito de sua estrutura, entenda q so fazer classe nao eh oo, se usar classe tera q usar MVC, e pra usar mvc com classe de crud, tera q usar padroes de projeto, dae eu prefiro usar o activerecord para crud, mas da pra fazer so com funcoes tb, tudo depende da sua estrutura, e de como você gosta trabalhar, eu gosto de trabalhar com oo puro, nao adianta eu falar pra você usar oo, se você nao souber os conceitos basicos de oo, so criar classe nao eh oo, e nunca sera...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpe a demorapara responder, a vida está corrida. Fiz um exemplo BÁSICO, não testei, porém é só você fazer adaptação com seu banco de dados e xuxu beleza.

<?

final class CRUD{

public $table, $fields, $values;

final public function create(){
	return mysql_query('INSERT INTO {$this->table} ({$this->fields}) VALUES ({$this->values})');
}

final public function update($where){
	return mysql_query('UPDATE {$this->table} {$this->values} WHERE {$where])');
}

final public class delete($where){
	return mysql_query('DELETE FROM {$this->table} {$where})');
i

final public class select(){
	return mysql_query('SELECT {$this->fields} FROM ({$this->table})');
}

}

final class User extends UserBean{

private $crud;

function __construct(){
	$this->crud = new CRUD();
}

public function insert(){
	$this->crud->table = "users";
	$this->crud->fields = "name, email, phone";
	$this->crud->values = " 'Seu nome', 'email@seuemail.com','(99) 9999-9999' ";
	$this->crud->create();
}

public function update(){
	parent::setId(10);
	$this->crud->table = "users";
	$this->crud->values = "name = 'Seu nome', email = 'email@seuemail.com', phone = '(99) 9999-9999' ";
	$this->crud->update(parent::getId());
}

public function delete(){
	parent::setId(10);
	$this->crud->table = "users";
	$this->crud->update('idUser = ' .parent::getId());
}

public function select(){
	$this->crud->table = "users";
	$this->crud->fields = "*";
	$this->crud->select();
}

}

?>

Este exemplo segue o padrão de projeto Active Record / Row Data Gateway. Mas acredito que seja mais um Row Data Gateway, pois o Active Record também pode fazer regras de negócio, ao contrário do Row Data Gateway. Neste exemplo, estamos trabalhando com objetos do tipo CRUD,mas isso vai de cada programador. Eu mesmo já usei mais ou menos este exemplo,mas atualmente trabalho com array.

 

Agora um exemplo do seu form (INSERT)

<html>
<form method="post" action="action.php?class=User">
	<label>Nome</label><input type="text" name="name" /><br />
	<label>Email</label><input type="text" name="email" /><br />
	<label>Phone</label><input type="text" name="phone" /><br />

	<? if(isset($_GET['idUser'])): ?>
		<!-- Se o action for update, então chame o método update, da classe User -->
		<button tpe="submit" name="action" value="update" />Atualizar Registro</button>
		<input type="hidden" name="idUser" value="10" /> <!-- troque o value pelo GET -->
	<? else: ?>
		<!-- Se o action for insert, então chame o método insert, da classe User -->
		<button tpe="submit" name="action" value="insert" />Inserir Registro</button>
	<? endif; ?>
</form>
</html>

 

action.php

if(isset($_POST['action'])):
switch(isset($_GET['class'])):
	case 'User':
		$user = new User();
		if($_POST['action'] == 'insert'):
			$user->insert();
		else if($_POST['action'] == 'update'):
			$user->update();
		else if($_POST['action'] == 'delete'):
			$user->delete();
		endif;
endswitch;
endif;

Vamos supor que você coloque um link (âncora) em sua tabela de dados (do seu select) e queria remover aquele registro, então basta fazer:

<a href="action.php?class=User&action=delete" title="Remover" />Remover Registro</a>

Bom, como disse anteriormente, não cheguei a testar, fiz aqui bem rapidinho pra te passar o caminho das "predas". Espero ter ajudado em algo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, como disse anteriormente, não cheguei a testar, fiz aqui bem rapidinho pra te passar o caminho das "predas". Espero ter ajudado em algo.

 

Valeu cara, toda ajuda é de grande importância pra mim, vou ver isso, também ando corrido por aqui, por isso que só agora te respondi. Muito obrigado mesmo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

aconselho a vocês começarem a utilizar um orm que ajuda muito, minha produtividade quase triplicou

 

 

estou utilizando hoje o Framework doctrine para orm integrado a um Framework próprio MCV

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pensei em usar Doctrine sim, mas não to afim por enquanto, pois o meu sistema está tudo esquematizado, é f*** sair mudando as coisas assim quando já está tudo funcionando.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde!

 

Então, Marcelo, tens que entender que várias classes não são orientação a objetos. Como você já deve saber, orientação a objetos é uma filosofia de desenvolvimento, e não a sintaxe em si.

 

De qualquer forma, como você mesmo disse: você não sabe programar orientado, certo? Pois bem, se você não sabe e quer fazer a estrutura do seu CRUD baseado na orientação, tente entender o "nativo" da orientação e algumas estruturas de sintaxes, tal como o encapsulamento, o famoso "$this" e etc.

 

Utilizar classes prontas para fazer um fragmento de um sistema pode comprometê-lo no futuro, uma vez que você poderá não saber manuseá-lo.

 

Minha dica, mesmo que teórica, pode lhe servir bem.

 

Espero ter te ajudado.

 

Abraços!

 

~ Edit ~

 

Desculpe, mas eu fiz a releitura do seu tópico principal e vi que você disse que não sabe programar OO em PHP... mas quem sabe programar OO, sabe em qualquer linguagem!

 

Percebi que a sua dificuldade é a sintaxe, portanto, agora mais do que nunca, repito: invista no entendimento do seu código. Se no futuro você precisa modificá-lo, não terás problemas.

 

E uma dica: tente substituir o "mysql"_query por PDO. Se um dia você trocar de banco, não terá que modificar a sintaxe do seu código, apenas parâmetros.

 

Abraços novamente!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pois é pessoal, respondendo agora a vocês, obrigado Guilherme Oderdenge pela resposta. Tenho sim uma noção de OO. Mas digo que é vaga, pois "aprendi" na faculdade. E digo uma, se você quer mesmo aprender algo corra atrás, alguns professores estão interessados em passar a matérias e não saber se você aprendeu ou não.

Por isso vi na imasters o algo a mais que me falta no dia a dia, a ajuda de quem sabe e de quem trabalha na area da WEB. Fico grato a todos. Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

se usar classe tera q usar MVC

 

discordo totalmente, trabalho com sistema de templates apenas com os blocos Model e View e consigo exercer o conceito de OO normalmente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ai tem uma questão, essa sua duvida é para um caso de estudo ou trabalho ?

ok, para ambiente academico é interessante analizar todas as teses, teorias, padrões, metodologias e talz.

mas para o profissional mais interessante é produtividade, claro é nessesario ter um codigo bem escrito, mas oque vem a ajudar, mete bala !

a minha sugestão é que para independente do caso, você construa a sua classe da maneira que saiba agora e va utilizando e estudando, com o passar do tempo você vai perceber que ela pode ser melhor, e fazendo ums "upgrades".

o interessante não é o codigo em si, mas sim a logica por tras, que se aprende praticando, errando refazendo melhorando etc.

 

valww =]

Compartilhar este post


Link para o post
Compartilhar em outros sites
discordo totalmente, trabalho com sistema de templates apenas com os blocos Model e View e consigo exercer o conceito de OO normalmente.

Apenas reiterando...

 

MVC é somente uma dentre muitas arquiteturas de software existentes. Pode-se muito bem utilizar programação OO sem seguir nenhuma arquitetura específica, mas elas representam as melhores maneiras de descrever objetos e suas interações.

 

Para a web, o MVC parece ser o bam-bam-bam, mas para aplicações desktop, o mais comum é utilizar o Presentation-Model, mas existem diversas outras.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ai tem uma questão, essa sua duvida é para um caso de estudo ou trabalho ?

ok, para ambiente academico é interessante analizar todas as teses, teorias, padrões, metodologias e talz.

mas para o profissional mais interessante é produtividade, claro é nessesario ter um codigo bem escrito, mas oque vem a ajudar, mete bala !

a minha sugestão é que para independente do caso, você construa a sua classe da maneira que saiba agora e va utilizando e estudando, com o passar do tempo você vai perceber que ela pode ser melhor, e fazendo ums "upgrades".

o interessante não é o codigo em si, mas sim a logica por tras, que se aprende praticando, errando refazendo melhorando etc.

 

valww =]

 

 

Na verdade é para os dois, mais para futuros trabalhos mesmo, trabalho com Suporte de TI mas gosto muito de programação com PHP e aprendi muita coisa em forum's e fazendo pesquisas, atualmente to fazendo o site da empresa onde trabalho e também projetando uma intranet para a mesma, gosto de ter um código "limpo", comentado, que eu possa entender depois de um tempo se precisar fazer algum tipo de alteração.

Tive OO com Delphi 7, na faculdade apenas. Vi alguma coisa de OO em PHP na internet, mas vou estudar mais isso, na faculdade não tenho aula com PHP ainda(nem sei se vou ter), então toda ajuda é bem vinda como sempre falo, ainda mais de profissionais que trabalham nesse meio da web.

 

Mas você ta certo, negócio é praticar, por isso que venho por meio desse forum para mim praticar OO em cima do CRUD, só gostaria de alguem que responde-se o seguinte. "Cara o teu 1º passo é tal, depois você vai para tal e se vira", pois acredito que cada um tem sua metodologia de trabalho. Acho que é um começo, até se você tiver algum exemplo disso elaborado e tiver como me passar(mais para mim ver sintaxe OO no PHP, pra mim ter idéia por onde começar), já fico grato. Valeu =)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Teu primeiro passo pode começar por aqui: http://forum.imasters.com.br/topic/392555-11-classes-x-objetos/

 

Opa...

Obrigado Evandro Oliveira, cara bem isso mesmo.. até já vi essa parte... achei esse tópico do João Batista Neto: PHP - OO. E to gostando muito do que to vendo/lendo.. é o caminho.

Vou ler e reler isso pra depois começar a praticar OO. Algumas coisas que li eu já tinha noção, agora abriu mais a visão para OO.

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.