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

Responder a