PHP MVC DAO ??? DUVIDA ME AJUDEM !!!

EWERTONESTACIO 04/04/2011 23:59:25
#370437
Fala galera de ASP.NET (os DEVS PHP de plantão podem me judar por favor) ,

Mais uma vez venho pedir ajuda, mas agora é para a parte conceitual de um aplicação.


Tenho td minha modelagem em UML...

tenho uma super classe Pessoa que especifica 2 outras ALUNO e FUNCIONARIO


cada classe especificada tem seus atributos e métodos na uml

-----------------
| P E S S O A |
-----------------

ID
NOME
ENDERECO


as classes especializadas tem algums atributos mais especificos :
Aluno tem Matricula;
Funcionario tem setor.


Blz até aí td bem, mas quando não mais q derrepende:

Me deparo com o Padrao de projeto DAO (Data Access Object) que me diz que cada objeto de banco de dados (tabelas) devem ser responsves pela manipulação dos dados em base de dados na minha aplicação. ( resumidamente), ou seja é a DAO q faz as consultas SQL.

Bom aí eu entendi blz... mas quando não mais q derrepende:

Eis q surge o Raio do MVC ... que consistem em dividir a aplicação em Modeo/Visão/Controle isso faz com q as telas sejam vsões, as regras estejam continas nos contrloes, e os modelos não objetos instaciaveis q fazem as coisas de banco de dados.

Bom aí eu entendi de novo, massssssss

Se o modelo faz as coisas de banco de dados tenho q instanciar objetos das minhas classes DAO nos meu modelo, (ok isso eu entendi naõ sou tão desligado assim), porem, minha pergunta consite em:

As minhas Classes ALUNO E FUNCIONáRIO: deixaram de ser simples classes em minha modelagem UM para se tornarem Modelos no meu MVC ?

a pergunta parece meio obvia, mas queria uma segnda opnião sobre isso.

Quem poder, qq coisa. qq luz... já será de muita ajuda.

Mais uma vez agradeço a atenção de todos.
abraços galera.

NETMANIA 05/04/2011 09:43:21
#370447
Cara, programar em MVC via PHP no começo digamos é um m... por que você produz muito código, mas quando você previsa fazer alterações nos código ou precisa aproveitar coisas de outra classe, as coisas ficam mais fáceis.

Você pode dar uma olhada neste exemplo de código MVC em PHP -> http://imasters.com.br/artigo/14723/php/qualidade_e_produtividade_com_mvc_em_php/
EWERTONESTACIO 06/04/2011 11:14:45
#370599
NETMANIA,
valeu.... vi algumas coisas que tiraram minhas duvidas


Fechando o Tópico.


Conclusão:


Os objetos levantatos pela modelagem UML serão atribuidos na arquitetura MVC como modelos, podorém, junto com o padrao de projeto DAO, estes mdelos não irão manipular as bases de dados.
Criaremos Classes DAO para esta manipulacao de dados. com isso teremos
Nos exemplos abaixo, a conexao vou deixar devendo, mas isso é apenas para um entendimento geral.



uma tabela Aluno

TBL_ALUNO
matr_alu
nome_alu


o objeto Aluno identificado na UML será transformado em modelo no MVC (codeigniter)

Class AlunoModelo extends Model {
private $matr;
private $nome;

//gert[ô]s e set[ô]s


}


Com isso todo acesso ao banco de dados se dará por um opjeto a parte.

Class AlunoDAO.Class{
private $sql;


/* faz a conexao*/

public function inseir( $objAluno){
$SQL = [Ô]INSERT INTO TBL_ALUNO(MATR_ALU,NOME_ALU)VALUES([ô]$objAluno->matr[ô],[ô]$objAluno->nome[ô]);
$con.execute $SQL;

}



}


no Controller


linkamos as 2 classes (o modelo e a DAO

require_once ([ô]AlunoModelo.php[ô]);
require_once ([ô]AlunoDAOphp[ô]);

Class AlunoController{

public function inserir(){
$a = new AlunoModelo();
$a ->setMatr([ô]123456[ô]);
$s->setNome([ô]Luis SIlva[ô]);

$dao = new AlunoDAO();
$dao->inserir($a);

echo [ô]Dados inseridos pela DAO.[ô];
}

}

Como no padrão de projeto DAO temos uma classe DAO para cada tabela, como listamos querys com varios joins ??

Na listagem de querys com várias tabelas vc pode criar um DAO generico, assim vc passa seu SQL como argumento de um método e este DAO Genérico te devolverá o Conjunto de REgistros,
Isso é muito util na montagem de grids

Class GenericoDAO {
private $sql;

//get[ô]s e set[ô]s

public function __construct($pSql){
$this->sql = $pSql;
}

public function executar(){
return Conexao.execute $this->getSql();
}

}


No controller fica mais ou menos assim.


o método direto
//fazer a referencia do DAO


public function montaGrid(){
$sql = [Ô]SELECT * FROM TABELA1 T1 INNER JOIN TABELA2 T2 ON T1.CHAVE_PRIMARIA = T2.CHAVE_ESTRANGEIRA [Ô]
$DaoGen= new GenericoDAO($sql);

$query = $DaoGen->executar();


// agora é sómontar o gris com sua query personalizada.

}



Ufa....

Bom galera..... me vi na obrigação de escrever td isso pois eu me decepsiono quando vejo tópicos que me ajudariam sem respostas relevantes.

é Melhor essa resposta do que nenhuma, assim pode ser útil para mais pessoas.

Forte Abraço.











Tópico encerrado , respostas não são mais permitidas