Marcus, mas como vc mesmo passou alguns links aqui discutindo a questão de se usar ou não DAO. Antes eu usava, agora não mais.
Em 16/01/08, Paulo Balzi <[EMAIL PROTECTED]> escreveu: > > é isso mesmo, tinha me esquecido, DAO. > o professor clareou um pouco as idéias em relação ao MVC. > vamos ver o q vai dar, daqui pra frente. > :) > > > 2008/1/16 Marcus Cavalcanti < [EMAIL PROTECTED]>: > > > Ah lembrando, como vc tá aprendendo Java, DAO é um pattern. > > > > http://java.sun.com/blueprints/corej2eepatterns/Patterns/DataAccessObject.html > > > > > > 2008/1/16 Marcus Cavalcanti <[EMAIL PROTECTED]>: > > > > o nome é DAO .. no DAO vc usa suas entidades (model) > > > > > > 2008/1/13 Paulo Balzi <[EMAIL PROTECTED]>: > > > > > > Marco, valeu pela explicação. > > > > Como surgiu essa questão aqui na lista e aproveitando que estou > > > > fazendo um curso de Java, perguntei sobre o MVC ao professor. > > > > Entendi o seguinte, que no Model fica o negócio da sua aplicação, > > > > independente de suar banco de dados ou não. Ele falou tbem, que muita > > > > gente > > > > costuma representar o modelo relacional do banco orientado a objeto, > > > > como vc > > > > fez, mas que não é necessáriamente fazer desse jeito. > > > > E do jeito que fiz, com as classes de selects, outra pra inserir, > > > > excluir, alterar, etc....eu nada mais, fiz uma camada de manipulação da > > > > base > > > > (ele falou o nome que seria isso mas eu esqueci!), e que não seria o > > > > Model > > > > da aplicação...hehe > > > > Resumindo, ainda tenho muito q entender. > > > > :o) > > > > > > > > 2008/1/11 Marco Telles <[EMAIL PROTECTED]>: > > > > > > > > Eu 'exprico' (ou tento...) :-) > > > > > > > > > > Com exemplo acho que fica melhor, ok ? Vou omitir os detalhes e > > > > > colocar > > > > > só os dados relevantes, se ficar confuso me fala. > > > > > > > > > > 1) Associação > > > > > Considerando: > > > > > a) tabela (classe) produto: > > > > > id > > > > > descricao > > > > > fabricante > > > > > > > > > > b) tabela (classe) fabrica: > > > > > id > > > > > nome > > > > > > > > > > c) código php (para não misturar com o ci, já que o problema não é > > > > > bem > > > > > com o ci) ;-) > > > > > > > > > > $fabricante = new Fabrica; > > > > > $fabricante->id = 777; > > > > > $fabricante->nome = 'Tabajara'; > > > > > > > > > > $produto = new Produto; > > > > > $produto->id = 1; > > > > > $produto->descricao = 'Assento Sanitário Ejetável'; > > > > > $produto->fabricante = $fabricante; > > > > > > > > > > echo 'Produto: ' . $produto->descricao; > > > > > >>> > > > > > Assento Sanitário Ejetável > > > > > echo 'Fabricante: ' . $produto->fabricante->nome; >>> > > > > > Tabajara > > > > > > > > > > Fico devendo a Agregação e Composição... :-) > > > > > > > > > > Abs > > > > > > > > > > Muita sorte para nós! > > > > > > > > > > Marco Telles > > > > > > > > > > ############# > > > > > # Pier de Ipanema ( http://www.pierdeipanema.com.br/ ) > > > > > # X-Trad Traduções BR ( http://www.x-trad.org/ ) > > > > > # CodeIgniter PHP framework ( http://www.codeigniter.com.br/ ) > > > > > # Ubuntu The power of free software ( http://www.ubuntu-br.org/ ) > > > > > # Python Programming Language ( http://www.pythonbrasil.com.br/ ) > > > > > > > > > > > > > > > > > > > > Paulo Balzi escreveu: > > > > > > Marco, achei bem legal esse seu exemplo, clareou mais um pouco > > > > > as > > > > > > idéias... > > > > > > > > > > > > mas não entendi direito a parte da associação, não consegui > > > > > visualizar > > > > > > direito como seria isso na hora de fazer uma consulta envolvendo > > > > > mais > > > > > > de uma tabela. > > > > > > > > > > > > valeu > > > > > > > > > > > > 2008/1/11 Marco Telles <[EMAIL PROTECTED] > > > > > > <mailto: [EMAIL PROTECTED]>>: > > > > > > > > > > > > E eu aproveito também para ver se entendi direito o model > > > > > ;-) > > > > > > > > > > > > Errado não está, mas considerando oop, onde cada classe > > > > > carrega > > > > > > seus atributos e métodos próprios, esse esquema foge ao > > > > > padrão e > > > > > > cria problemas futuros, apesar de funcionar... > > > > > > > > > > > > Estou com o que disse o Edinho. Além do CI só conheço o Zend > > > > > e ele > > > > > > associa também um model bastando declarar na classe um > > > > > atributo > > > > > > protected com o nome da tabela. > > > > > > > > > > > > Cada model deve conter uma única tabela (repito, > > > > > considerando oop > > > > > > já que mvc estou engatinhando, então posso estar enganado), > > > > > seus > > > > > > atributos e métodos específicos (que vão incluir as > > > > > validações, > > > > > > etc... como já discutido aqui). > > > > > > > > > > > > No caso se tenho uma tabela produto com produtoId, > > > > > produtoNome, > > > > > > produtoMarcaId e outra tabela marca com marcaId e marcaNome, > > > > > então > > > > > > ficaria: > > > > > > > > > > > > Model prodmodel.php: > > > > > > > > > > > > Class Prodmodel > > > > > > { > > > > > > private $produtoId; > > > > > > private $produtoNome; > > > > > > private $produtoMarca; > > > > > > const Tab = 'produto'; > > > > > > > > > > > > function __construct() { > > > > > > // Chama o construtor do Model > > > > > > parent::Model(); > > > > > > $this->load->model('Marcamodel'); // ou pode chamar > > > > > também > > > > > > no método, caso apenas um método utilize a tabela para > > > > > associação ? > > > > > > } > > > > > > > > > > > > function selProdAll() { > > > > > > // seleciona todos produtos e retorna um objeto > > > > > > $query = $this->db->get(self::Tab); > > > > > > return $query->result(); > > > > > > } > > > > > > > > > > > > function assProdMarca( $id ) { > > > > > > // faz a associação da tabela marca e produto - o > > > > > model > > > > > > marca poderia ser chamado aqui. ? > > > > > > $this->produtoMarca = $this->Marcamodel->get( $id ); > > > > > > } > > > > > > > > > > > > (...) > > > > > > } > > > > > > > > > > > > Na classe Marca, é a mesma coisa, com seus respectivos > > > > > atributos e > > > > > > métodos.. > > > > > > > > > > > > Isso é o que entendi do model > > > > > > > > > > > > Abs > > > > > > > > > > > > Marco > > > > > > > > > > > > Paulo Balzi escreveu: > > > > > >> vou aproveitar a deixa pra ver se estou fazendo certo. :o) > > > > > >> > > > > > >> Na minha aplicação eu criei o seguinte: > > > > > >> - um model para fazer selects no banco: nesse model > > > > > existem > > > > > >> vários tipos de selects, variando a qtd de paramentros, o > > > > > tipo do > > > > > >> retorno, etc > > > > > >> - um model pra trabalhar com metadados da tabela: aqui > > > > > criei > > > > > >> métodos q busca a chave primária da tabela, outra q retorna > > > > > os > > > > > >> campos da tabela, etc... > > > > > >> - um terceiro model para fazer o CRUD (insert, delete, > > > > > alter) nas > > > > > >> tabelas > > > > > >> > > > > > >> Nos meus controlers, eu simplesmente vou chamando o que eu > > > > > >> preciso, um select, um insert, etc... > > > > > >> > > > > > >> acredito que 100% correto não está, mas está muito errado?? > > > > > >> > > > > > >> valeu > > > > > >> > > > > > >> 2008/1/11 Edinho Almeida < [EMAIL PROTECTED] > > > > > >> <mailto:[EMAIL PROTECTED]>>: > > > > > >> > > > > > >> O CodeIgniter me parece ser o único que não associa por > > > > > > > > > > >> padrão um Model a uma Tabela. > > > > > >> > > > > > >> Em Cakephp ou Rails você cria > > > > > >> um Model chamado Produto e ele já se relaciona com a > > > > > tabela Produtos. > > > > > >> Isso é interessante porque nestes frameworks já > > > > > ganhamos > > > > > >> alguns metodos no model sem digitar nada no model em > > > > > si: > > > > > >> Poderia fazer por exemplo: > > > > > >> > > > > > >> No model: > > > > > >> > > > > > >> class Produto extends Model { > > > > > >> function Produto() > > > > > >> { > > > > > >> parent::Model(); > > > > > >> } > > > > > >> } > > > > > >> > > > > > >> No controller: > > > > > >> $this->load->model('Produto'); > > > > > >> $result = $this->produto->findById('122'); //encontrará > > > > > a > > > > > >> linha no banco usando where id='122' > > > > > >> ou > > > > > >> $result = $this->produto->findByName('Camiseta > > > > > branca'); > > > > > >> //encontrará a linha no banco usando where > > > > > name='Camiseta > > > > > >> branca' > > > > > >> > > > > > >> ATENÇÃO: O CÓDIGO ACIMA NÃO EXISTIRÁ NO CODEIGNITER - É > > > > > UM > > > > > >> EXEMPLO > > > > > >> > > > > > >> Para termos isso no codeigniter teríamos que criar > > > > > estes > > > > > >> metodos na unha: > > > > > >> class Produto extends Model { > > > > > >> function Produto() > > > > > >> { > > > > > >> parent::Model(); > > > > > >> } > > > > > >> function _findByAlgo($algo,$valor){ > > > > > >> $this->db->where( $algo, $valor); > > > > > >> $query = $this->db->get('Produtos'); > > > > > >> return $query->result(); > > > > > >> } > > > > > >> function findById($id){ > > > > > >> return $this->_findByAlgo('id',$id); > > > > > >> } > > > > > >> function findByName($id){ > > > > > >> return $this->_findByAlgo('name',$id); > > > > > >> } > > > > > >> } > > > > > >> > > > > > >> Num projeto que desenvolvi que haviam várias páginas de > > > > > > > > > > >> formulários eu tinha um controller e um model para cada > > > > > página. > > > > > >> EX: página DADOS DO PROPONENTE > > > > > >> no controller eu tinha: > > > > > >> $this->load->model('Dados_do_proponente'); > > > > > >> E no Model Dados_do_proponente eu alterava dados nas > > > > > tabelas: > > > > > >> proponentes //que continha uma coluna para dizer se era > > > > > >> pessoa fisica ou juridica > > > > > >> proponentes_pf > > > > > >> proponentes_pj > > > > > >> proponentes_areasdeatuacao // tabela N:N com a tabela > > > > > >> areasdeatuacao > > > > > >> > > > > > >> Ou seja em vez de chamar vários Models eu chamava um > > > > > único > > > > > >> model e e este fazia a ponte com várias tabelas. > > > > > >> No caso do Cakephp e Rails eu estaria saindo do padrão > > > > > para > > > > > >> fazer isso. > > > > > >> Mas no caso do codeigniter ele já parte do principio de > > > > > você > > > > > >> ter somente o metodos que utilizará. Vide exemplo do > > > > > model na > > > > > >> documentação que contém os metodos > > > > > get_last_ten_entries(), > > > > > >> insert_entry() e update_entry(); > > > > > >> > > > > > >> Abs > > > > > >> Edinho Almeida > > > > > >> > > > > > >> > > > > > >> > > > > > >> On 1/10/08, *Marco Telles* < [EMAIL PROTECTED] > > > > > > > > > > >> <mailto:[EMAIL PROTECTED]>> wrote: > > > > > >> > > > > > >> Pelo que entendi, para cada tabela corresponde um > > > > > model, > > > > > >> é isso ? > > > > > >> E para chamar tem que ser um a um ? > > > > > >> Exemplo: > > > > > >> $this->load->model('Produtomod'); > > > > > >> $this->load->model('Linhamod'); > > > > > >> (...) > > > > > >> > > > > > >> Buscando no guia, ví que o segundo parâmetro é para > > > > > >> usarmos outro nome, > > > > > >> mas não vi nada para carregar vários models... > > > > > >> > > > > > >> Abs > > > > > >> > > > > > >> -- > > > > > >> Muita sorte para nós! > > > > > >> > > > > > >> Marco Telles > > > > > >> > > > > > >> ############# > > > > > >> # Pier de Ipanema ( > > > > > http://www.pierdeipanema.com.br/ ) > > > > > >> # CodeIgniter PHP framework ( > > > > > >> http://www.codeigniter.com.br/ ) > > > > > >> # Ubuntu The power of free software ( > > > > > >> http://www.ubuntu-br.org/ ) > > > > > >> # Python Programming Language ( > > > > > >> http://www.pythonbrasil.com.br/ ) > > > > > >> > > > > > >> > > > > > >> _______________________________________________ > > > > > >> Lista mailing list > > > > > >> [email protected] <mailto: > > > > > [email protected]> > > > > > >> > > > > > http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br > > > > > >> > > > > > >> <http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br > > > > > > > > > > > >> > > > > > >> > > > > > >> > > > > > >> _______________________________________________ > > > > > >> Lista mailing list > > > > > >> [email protected] <mailto: > > > > > [email protected]> > > > > > >> > > > > > http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br > > > > > >> > > > > > >> > > > > > >> > > > > > >> > > > > > >> -- > > > > > >> Paulo Balzi > > > > > >> > > > > > ------------------------------------------------------------------------ > > > > > >> > > > > > >> _______________________________________________ > > > > > >> Lista mailing list > > > > > >> [email protected] <mailto: [email protected]> > > > > > >> > > > > > >> http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br > > > > > > > > > > > > > > > > > _______________________________________________ > > > > > > Lista mailing list > > > > > > [email protected] <mailto: [email protected]> > > > > > > > > > > > > http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > > Paulo Balzi > > > > > > > > > > > ------------------------------------------------------------------------ > > > > > > > > > > > > _______________________________________________ > > > > > > Lista mailing list > > > > > > [email protected] > > > > > > http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br > > > > > > > > > > > > > > > > > > > > > _______________________________________________ > > > > > Lista mailing list > > > > > [email protected] > > > > > > > > > > http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br > > > > > > > > > > > > > > > > > > > > > -- > > > > Paulo Balzi > > > > _______________________________________________ > > > > Lista mailing list > > > > [email protected] > > > > http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br > > > > > > > > > > > > > > > _______________________________________________ > > Lista mailing list > > [email protected] > > http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br > > > > > > > -- > Paulo Balzi > > _______________________________________________ > Lista mailing list > [email protected] > http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br > >
_______________________________________________ Lista mailing list [email protected] http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br

