Valeu Eric, vou da uma olhada aqui.
abraço 2009/2/11 <[email protected]> > Enviar submissões para a lista de discussão Lista para > [email protected] > > Para se cadastrar ou descadastrar via WWW, visite o endereço > http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br > ou, via email, envie uma mensagem com a palavra 'help' no assunto ou > corpo da mensagem para > [email protected] > > Você poderá entrar em contato com a pessoa que gerencia a lista pelo > endereço > [email protected] > > Quando responder, por favor edite sua linha Assunto assim ela será > mais específica que "Re: Contents of Lista digest..." > > Tópicos de Hoje: > > 1. Re: Exemplo MVC boas praticas (Eric Saboia) > (Eric Saboia (Fortes Informatica)) > > > ---------- Mensagem encaminhada ---------- > From: "Eric Saboia \(Fortes Informatica\)" <[email protected]> > To: "CodeIgniter Brasil" <[email protected]> > Date: Wed, 11 Feb 2009 10:59:33 -0300 > Subject: Re: [CodeIgniter] Exemplo MVC boas praticas (Eric Saboia) > Será um prazer ;) > > *Model: http://rafb.net/p/lvUQZn85.html > Controller: http://rafb.net/p/9xn4qn83.html > View: http://rafb.net/p/BmjSN559.html* > > Tomara que eu não passe vergonha :D > > > ----- Original Message ----- > *From:* bsb infor <[email protected]> > *To:* [email protected] > *Sent:* Wednesday, February 11, 2009 10:15 AM > *Subject:* Re: [CodeIgniter] Exemplo MVC boas praticas (Eric Saboia) > > Olá Eric Saboia, > > estou acompanhando esta lista e achei muitissimo interessante seu model, > gostaria de lhe pedir que postasse aqui as 3 camadas, desta forma acho que > fica facil pra qualquer pessoa entender. > > Se eu estiver abusando favor desculpar. > > Abraço a todos. > > > 2009/2/11 <[email protected]> > >> Enviar submissões para a lista de discussão Lista para >> [email protected] >> >> Para se cadastrar ou descadastrar via WWW, visite o endereço >> >> http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br >> ou, via email, envie uma mensagem com a palavra 'help' no assunto ou >> corpo da mensagem para >> [email protected] >> >> Você poderá entrar em contato com a pessoa que gerencia a lista pelo >> endereço >> [email protected] >> >> Quando responder, por favor edite sua linha Assunto assim ela será >> mais específica que "Re: Contents of Lista digest..." >> >> Tópicos de Hoje: >> >> 1. Re: Exemplo MVC (boas práticas) (Eric Saboia (Fortes Informatica)) >> >> >> ---------- Mensagem encaminhada ---------- >> From: "Eric Saboia \(Fortes Informatica\)" <[email protected] >> > >> To: "CodeIgniter Brasil" <[email protected]> >> Date: Wed, 11 Feb 2009 09:07:36 -0300 >> Subject: Re: [CodeIgniter] Exemplo MVC (boas práticas) >> Vinicius, >> 5 camadas no DDD? até onde eu sabia eram 4, e que pra mim na verdade >> acabam sendo as 3 do MVC, ele só divide o Model em duas camadas, pra separar >> o que realmente pertence a um dominio e o que é utilizado (requerido e etc) >> por esse domínio. >> >> O livro que indico sobre DDD é: Domain-Driven DESIGN por Eric Evans, que é >> o criador da "pattern". >> >> Quanto a um Model pra cada tabela, isso não existe.. na verdade o que você >> tem pra cada tabela é um objeto persistente, a tal classe que tem atributos >> iguais as colunas de uma tabela (no caso o CI não implementa isso >> nativamente, você pode procurar algo sobre ORM se tiver interesse), mas um >> modelo pode conter vários métodos utilizando mais de uma tabela (desde que >> sejam do mesmo domínio) >> >> Aproveitando o que acabei de falar e respondendo a outra dúvida, de como >> deve ser a lógica quando precisamos de um registro dentro do outro (Como >> recuperar a lista de usuários e seus emails), eu faço assim: >> >> >> >> function >> listarEvento($data=false) >> { >> // Percorre os meses >> $meses = $this->listarMes($data); >> >> foreach ($meses as $mesRow) { >> $retorno[$i]['mes'] = $mesesArray[$mesRow['mes']]; >> // Percorre os eventos deste mes >> $eventos = $this->listarMesEvento($mesRow['mes'], date('Y'), >> $data); >> $retorno[$i]['eventos'] = $eventos; >> >> $i++; >> } >> >> return $retorno; >> } >> >> Tanto o método listarEvento, quanto o método listarMes, quanto o método >> listarMesEvento estão no mesmo modelo. Assim, no listarEvento monto um >> objeto contendo todos os meses e dentro de cada mês um objeto contendo todos >> os eventos deste mes. >> >> Dentro do controller simplesmente chamo $this->modelo->listarEvento(); e >> já tenho tudo mastigado pra percorrer na view. >> >> >> Ah, por favor fiquem a vontade pra criticar qualquer coisa que falei... >> estou aqui aprendendo sobre o assunto tanto quanto vocês! :D >> >> ----- Original Message ----- >> *From:* Ricardo Valfreixo <[email protected]> >> *To:* CodeIgniter Brasil <[email protected]> >> *Sent:* Tuesday, February 10, 2009 9:29 PM >> *Subject:* Re: [CodeIgniter] Exemplo MVC (boas práticas) >> >> Ola a todos, >> >> metendo a minha colher. >> >> O Service Layer começou a ser usado essencialmente por causa dos >> interfaces. Assisti de muito perto uma evolução normal de MCV "tradicional" >> para uma arquitectura de 4 tiers. A verdade é que para equipas grandes se >> torna a forma mais simples de descentralizar trabalho. >> >> Nesse projecto, tinha um génio das bases de dados que se encarregava de >> todos os models e optimização dos bancos de dados. Havia um javascript >> wizard que tratava de todos os interfaces. E dois developers que tratavam do >> service layer onde o grosso da acção se passava. Os controladores >> funcionavam como "policias de transito" que apenas redireccionava >> processamento e decidia qual o pedaço de software seguinte a ser chamado. >> >> Em especial porque havia alguns pedaços do sistema que eram sistemas REST >> e webservices. Para isto, o service layer é perfeito. >> >> Agora, muito sinceramente, para o site pequeno e "normal" os 3 tiers >> chegam e sobram. >> >> Mas isso são os meus dois tostões :) >> >> // Zen >> >> >> >> 2009/2/10 Marcus Cavalcanti <[email protected]> >> >>> E acho que por ultimo pode deixar esse aqui: >>> >>> http://www.submarino.com.br/produto/9/373407?franq=102414 >>> >>> >>> >>> >>> >>> 2009/2/10 Marcus Cavalcanti <[email protected]> >>> >>>> os livros são meios caros,mas vale.. >>>> >>>> mas tem um site que tem pdf de livros, para quem curtir: >>>> http://www.flazx.com/ >>>> >>>> >>>> 2009/2/10 Marcus Cavalcanti <[email protected]> >>>> >>>>> É isso, pensa que no controller não deve conhecer as regras da sua >>>>> aplicação, ele apenas faz chamdas, controla fluxo, popula objetos, essas >>>>> coisas, mas ele não deve conhecer regras .. >>>>> >>>>> Livros: >>>>> >>>>> http://www.submarino.com.br/produto/9/343713/domain-driven+design >>>>> >>>>> http://www.submarino.com.br/produto/1/1348031/padroes+de+arquitetura+de+aplicacoes+corporativas >>>>> >>>>> http://www.submarino.com.br/produto/1/242126/refatoracao:+aperfeicoando+o+projeto+de+codigo+existente >>>>> >>>>> >>>>> 2009/2/10 Vinicius Cruz <[email protected]> >>>>> >>>>>> Fala, Marcus! >>>>>> Sobre DDD, tens algum livro ou apostila para indicar? >>>>>> >>>>>> O que me preocupou com tudo isso é justamente o que citastes. Estou >>>>>> vendo além, uma nova abordagem. E, cada mês que passa, o sistema da >>>>>> empresa >>>>>> tem crescido consideravelmente. E, do jeito que as coisas estão indo, a >>>>>> escalabilidade estava em baixa. Ou seja, daqui a um tempo, eu (ou outro >>>>>> louco que assumisse o comando) iria se ver doido pra deixar tudo em >>>>>> ordem. >>>>>> >>>>>> Dai a necessidade de eu entender melhor essa abordagem, analisar as >>>>>> entidades, e refatorar, na medida do possivel, o sistema nesse "novo >>>>>> conceito". >>>>>> >>>>>> A mosta tá virando um bicho, eu ainda estou com o mata-mosca em mãos. >>>>>> =D >>>>>> >>>>>> Em relação ao exemplo, minha dúvida é se o code deve estar no >>>>>> controller, ou no model, já que o mesmo é responsável pela regra de >>>>>> negócio. >>>>>> Estive lendo um pouco de ruby on rails, e eles tem por lema deixar o >>>>>> model >>>>>> gordo e o controller magro, não é isso? >>>>>> >>>>>> Vinicius >>>>>> >>>>>> 2009/2/10 Marcus Cavalcanti <[email protected]> >>>>>> >>>>>> Fala Vinicus.. DDD é um pouco sobre do que estamos tentando falar, se >>>>>>> aprofunde que vale a pena, cada vez que vc se aprofundar, mais vai >>>>>>> perceber >>>>>>> que sabia menos das coisas hehe isso é normal, por isso as vezes a >>>>>>> ignorância uma dádiva, mas em outros casos não hehe >>>>>>> >>>>>>> Mas vamos lá, então, isso é uma questão bem conceitual mesmo... não é >>>>>>> que o CI está errado, acho que ele apenas não dá um suporte NATIVO para >>>>>>> aplicações mais complexas, mas nada que você possa extendê-lo, como eu >>>>>>> faço >>>>>>> por exemplo no caso do services, sacou? Na verdade ele implementa o MVC >>>>>>> certo, pois ele separa as coisas, agora como as pessoas fazem o seu >>>>>>> uso, aí >>>>>>> é outra coisa.. uma coisa que eu acho importante citar é que nesse >>>>>>> caso não >>>>>>> existe o certo e o errado e a verdade e a mentira, o que existe é uma >>>>>>> preocupação para quando o buraco ficar mais embaixo.. se você faz da >>>>>>> forma X >>>>>>> e te atende muito bem, vc não tem problemas, consegue dar manutenção, >>>>>>> extender e etc, ok ótimo, te atende, para que você vai mudar? Agora se >>>>>>> você >>>>>>> começar a perceber ao conhecer uma nova abordagem que o que você usava >>>>>>> pode >>>>>>> ser melhorado, é bom vc começar a pensar nisso, o que eu quero dizer é >>>>>>> "Não >>>>>>> tente matar uma mosca com um tiro do canhão". >>>>>>> >>>>>>> A gente tá falando de aplicações enterprise, ou seja, aplicações com >>>>>>> um certo tamanho, onde é importante você deixar as coisas menos >>>>>>> acopladas >>>>>>> possíveis e mais coesas também. Por exemplo, ActiveRecord, se vc for >>>>>>> parar >>>>>>> pra pensar na essencia é um anti-pattern, mas em muitos casos ele dá uma >>>>>>> agilidade e velocidade de desenvolvimento que fazer o seu uso é muito >>>>>>> bom. >>>>>>> Da mesma forma que as vezes você usar Activerecord em alguns casos não é >>>>>>> bom, é melhor começar a pensar em soluções que implementem um ORM por >>>>>>> exemplo. >>>>>>> >>>>>>> No seu caso de usuários x emails, você poderia pensar da seguinte >>>>>>> forma: >>>>>>> >>>>>>> - É um usuário que conhece um email ou um email que conhece um >>>>>>> usuário? >>>>>>> - Um email precisa de alguém para ser enviado, esse alguém é um >>>>>>> usuário? >>>>>>> - Você precisa ter uma entidade para relação email_x_usuario? Eu >>>>>>> sinceramente acredito que nao, pq o dominio da sua aplicacao fala de >>>>>>> usuario >>>>>>> e email e não de uma relação, nesse caso um "select * from >>>>>>> email_x_usuario >>>>>>> where id_usuario = ?" não resolveria o problema? e onde isso ficaria? >>>>>>> acredito que no modelo de usuario, mas depende. >>>>>>> >>>>>>> Por isso que é importante vc analisar seu cenário, não tem uma >>>>>>> receita de bolo feita, cada aplicação tem um contexto e >>>>>>> particularidades o >>>>>>> importante nesse caso é conhecer as alternativas para ver a que melhor >>>>>>> te >>>>>>> atende. >>>>>>> >>>>>>> Engenheria de software é algo ainda recentemente novo, comparo por >>>>>>> exemplo a uma engenharia civil por exemplo, portanto ainda é algo que >>>>>>> cabem >>>>>>> muitas definições, opniões, conceitos, por isso que a parada é estudar >>>>>>> mesmo >>>>>>> :) >>>>>>> >>>>>>> 2009/2/10 Newton Wagner <[email protected]> >>>>>>> >>>>>>>> Adicionando um pouco de sal à dúvida, neste caso pode-se considerar >>>>>>>> >>>>>>>> que e-mail seria uma entidade fraca, ou seja, ela não existe sem o >>>>>>>> usuário. Mas e se for uma entidade forte? Vocês tratariam da mesma >>>>>>>> forma? :) >>>>>>>> >>>>>>>> >>>>>>>> 2009/2/10 Vinicius Cruz <[email protected]>: >>>>>>>> > Roberto >>>>>>>> > faz sentido. Li uma vez no manual, se não me engano, dizendo que >>>>>>>> para cada >>>>>>>> > tabela deveria ter um model... oO >>>>>>>> > Não lembro exatamente onde foi, mas essa discussão está quebrando >>>>>>>> vários >>>>>>>> > paradigmas (pelo menos pra mim). >>>>>>>> > >>>>>>>> > Vinicius >>>>>>>> > 2009/2/10 Roberto A. Longhi <[email protected]> >>>>>>>> >> >>>>>>>> >> Salve Vinicius blz ? >>>>>>>> >> >>>>>>>> >> =] >>>>>>>> >> Bom to entrando de gaiato na história, mas tenho algumas duvidas >>>>>>>> referente >>>>>>>> >> a isso, e vou colocar algumas considerações. >>>>>>>> >> >>>>>>>> >> No caso que você ilustrou do usuário com vários emails, acredito >>>>>>>> que o >>>>>>>> >> ideal é deixar a consulta de emails no mesmo model, neste caso o >>>>>>>> model de >>>>>>>> >> usuário, para evitar carregar outros models. >>>>>>>> >> >>>>>>>> >> $queryUsuario = $this->Usuariomodel->getLista(); >>>>>>>> >> foreach($queryUsuario->result() as $row) >>>>>>>> >> { >>>>>>>> >> $idusuario = $row->idusuario; >>>>>>>> >> $emails[$idusuario] = >>>>>>>> $this->Usuariomodel->getEmails($idusuario); >>>>>>>> >> } >>>>>>>> >> Estou levando para o lado que o model controla todas as >>>>>>>> informações >>>>>>>> >> relacionados a aquela entidade (no caso o usuário). Mesmo que ela >>>>>>>> seja >>>>>>>> >> armazenada em outra tabela (nesse caso uma tabela de >>>>>>>> emailXusuario. >>>>>>>> >> >>>>>>>> >> Faz sentido ? >>>>>>>> >> >>>>>>>> >> Vinicius Cruz escreveu: >>>>>>>> >> >>>>>>>> >> Ok, Marcus. >>>>>>>> >> Esses dias estava dando uma lida sobre DDD. Li algo sobre >>>>>>>> arquitetura de 5 >>>>>>>> >> camadas, e estou tentando me aprofundar cada vez mais no assunto. >>>>>>>> Alias, to >>>>>>>> >> indo hoje fazer uma entrevista pra pós de engenharia de software. >>>>>>>> Vou meter >>>>>>>> >> as caras nos livros!! =D >>>>>>>> >> Agora, sempre surge novas duvidas. Por exemplo: uma vez foi >>>>>>>> postado na >>>>>>>> >> lista, sobre como recuperar a lista de alguma coisa de um >>>>>>>> usuário. Por >>>>>>>> >> exemplo: um usuário tem vários emails cadastrados, em uma tabela >>>>>>>> de >>>>>>>> >> relacionamento. Como recuperar a lista de usuários e seus emails? >>>>>>>> >> Como eu faço atualmente. No controller: >>>>>>>> >> $queryUsuario = $this->Usuariomodel->getLista(); >>>>>>>> >> foreach($queryUsuario->result() as $row) >>>>>>>> >> { >>>>>>>> >> $emails[$row->idusuario] = >>>>>>>> >> $this->Emailsmodel->consulta_emails($row->idusuario); >>>>>>>> >> } >>>>>>>> >> Mas entrei em profunda depressão em saber que o CI não aborda o >>>>>>>> MVC como >>>>>>>> >> conceituado (ou pelo menos dá margem ao erro). eheheheheh >>>>>>>> >> Mas a questão é: tá errado fazer assim? Qual seria uma outra >>>>>>>> abordagem? >>>>>>>> >> Vinicius >>>>>>>> >> 2009/2/10 Djalma Araújo | www.djalmaaraujo.com.br >>>>>>>> >> <[email protected]> >>>>>>>> >>> >>>>>>>> >>> Então, pode crer... >>>>>>>> >>> a idéia é apenas o usuário enviar a imagem dele no portfolio e >>>>>>>> atualizar >>>>>>>> >>> no banco.. essa atualizacao eu utilizo um funcao o model.. >>>>>>>> >>>> >>>>>>>> >>> >>>>>>>> >>> _______________________________________________ >>>>>>>> >>> 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 >>>>>>>> >> >>>>>>>> >> >>>>>>>> >> -- >>>>>>>> >> Roberto Almeida Longhi >>>>>>>> >> Programador >>>>>>>> >> Contmatic >>>>>>>> >> (11) 2942 6700 Ramal 1404 >>>>>>>> >> (11) 8599 9022 >>>>>>>> >> www.contmatic.com.br >>>>>>>> >> >>>>>>>> >> _______________________________________________ >>>>>>>> >> 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 >>>>>>>> > >>>>>>>> > >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> Newton Wagner >>>>>>>> >>>>>>>> skype: newtonwagner >>>>>>>> msn/gtalk: [email protected] >>>>>>>> >>>>>>>> http://www.newtonwagner.net/ >>>>>>>> - http://www.owshit.com.br/ >>>>>>>> >>>>>>>> _______________________________________________ >>>>>>>> Lista mailing list >>>>>>>> [email protected] >>>>>>>> http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br >>>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> Marcus Cavalcanti >>>>>>> 21 9144-5068 >>>>>>> www.marcuscavalcanti.net/blog >>>>>>> >>>>>>> _______________________________________________ >>>>>>> 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 >>>>>> >>>>>> >>>>> >>>>> >>>>> -- >>>>> Marcus Cavalcanti >>>>> 21 9144-5068 >>>>> www.marcuscavalcanti.net/blog >>>>> >>>> >>>> >>>> >>>> -- >>>> Marcus Cavalcanti >>>> 21 9144-5068 >>>> www.marcuscavalcanti.net/blog >>>> >>> >>> >>> >>> -- >>> Marcus Cavalcanti >>> 21 9144-5068 >>> www.marcuscavalcanti.net/blog >>> >>> _______________________________________________ >>> 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 >> >> >> _______________________________________________ >> 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 > > > _______________________________________________ > 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

