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

