Marcus vc poderia dar um exemplo usando aquele exemplo das cartas de como vc implemente o Service Layer?
Acho que seria de uma grande ajuda pro pessoal e poderia ser disponibilizado no site do CI. Até mais. 2009/2/6 Marcus Cavalcanti <[email protected]> > Esse "scan" da revista diz bem o que estou querendo dizer e o inverso que o > BambooInvoice faz. > > > 2009/2/6 Marcus Cavalcanti <[email protected]> > >> Acadei dando um "send" sem querer, mas continuando.. >> >> O cachorro que deve conhecer os seus métodos, se ele deve latir alto ou >> baixo (regra d enegócio/validação) é ele quem deve conhecer e não a >> aplicação, pois isso diz respeito ao cachorro e não a aplicação então qual >> sentido de ter isso no controller? >> >> Quando você tem duas entidades, por exemplo, um método "enviarCarta" você >> está dizendo respeito na verdade a duas entidades: carta e pessoa. Pessoa pq >> alguém envia uma carta e nesse caso é uma pessoa, então vocês devem estar se >> perguntando: Isso fica em qual das duas classes? A resposta é nenhuma, isso >> deveria ficar em outra camada, na qual chamam de "Services Layer" que é >> responsável por implementar isso. >> >> Essas questões divergem, tem várias oponiçoes, o negócio é tentar pensar >> nas coisas como objetos. Sinceramente o MVC que o CI implementa não é um MVC >> como foi proposto, o pattern mesmo, mas é como o CI implementa. >> >> Eu nunca tenha regras de negócio no meu controller, ou é no model ou tenho >> uma camada a mais, conforme já citei. >> >> Esse é um bom assunto a ser discutido aqui e a propósito eu acho essa app >> BambooInvoice um péssimo exemplo. >> >> 2009/2/6 Marcus Cavalcanti <[email protected]> >> >> hahaha adoro essas discussões... >>> >>> Pensando no MVC, o que o Luciano botou é o certo a ser feito. >>> >>> Controllers não devem ter regras de negócio da aplicação, controllers não >>> conhecem isso, apenas direcionam a aplicação. >>> >>> Em OO purista e como deveria ser, segundo Domain Driven Design, as >>> informações e regras de negócio de uma entidade deveriam dizer respeito a >>> ela e não a um controller, lembre-se, aprendemos OO da seguinte forma: >>> >>> class Cachorro extends Mamifero { >>> public function latir() { >>> >>> } >>> >>> >>> >>> 2009/2/6 Eric Saboia (Fortes Informatica) <[email protected] >>> > >>> >>> Concordo, >>>> Só complementando, regras genéricas como "validação, redimensionamento >>>> de uma imagem, apuramento de dados e etc" devem sim ser utilizadas no >>>> Model, >>>> porém, se não tem ligação direta com o domínio do model em questão, podem >>>> ficar separadas em um helper ou library. >>>> >>>> Não faz muito sentido você dar load em um Model diferente do domínio >>>> atual, só pra aproveitar algum método, melhor é deixar essas regras >>>> encapsuladas e chamar diretamente dentro de cada Model necessário. >>>> >>>> Mas isso já diz mais respeito a DDD do que ao MVC em si (eu acho), e é >>>> claro, como tudo que estudamos, é sempre uma sugestão de boa conduta de >>>> desenvolvimento, não estou dizendo que é uma regra ;) >>>> >>>> ----- Original Message ----- >>>> *From:* Ricardo Valfreixo <[email protected]> >>>> *To:* CodeIgniter Brasil <[email protected]> >>>> *Sent:* Friday, February 06, 2009 5:57 AM >>>> *Subject:* Re: [CodeIgniter] MVC de verdade >>>> >>>> >>>> Não existe um papel claro escrito na pedra. Existem ferramentas e >>>> práticas. De uma forma geral , é apenas bom senso. O CI é fabuloso porque >>>> nos dá liberdade para fazermos a aplicação da forma que quisermos. E é mau >>>> porque nos dá liberdade para fazermos a aplicação da forma que quiseres >>>> eheheh. >>>> >>>> Com o codeigniter não precisas sequer de usar models e views. Pode >>>> simplesmente usar controllers, fazer chamadas directas ao banco de dados e >>>> produzir echos para visualização. No entanto estão lá as outras estruturas >>>> para nos ajudar a vida. >>>> >>>> Colocar código nos models é uma boa ideia por muitos motivos. Mas vou >>>> dar apenas um para te por a pensar. Se quiseres reutilizar um código (um >>>> qualquer, validação, redimensionamento de uma imagem, apuramento de dados, >>>> etc) onde é mais simples de colocar para ser utilizado em qualquer lado? >>>> >>>> Se for no controlador, terá de usar copy/paste para reproduzir. Enquanto >>>> se estiver num model é apenas fazer load do model e usar o método. >>>> >>>> Para mim e cada vez mais para os utilizadores de arquitecturas MVC a >>>> regra é deixar os controladores o mais magro possível e deixar os models >>>> engordar à vontade. >>>> >>>> Agora a decisão é sempre tua :) >>>> >>>> //Zen >>>> >>>> >>>> >>>> >>>> 2009/2/5 Eric Saboia (Fortes Informatica) < >>>> [email protected]> >>>> >>>>> Cara, eu lembro que já foi discutido sim, mas não especificamente sobre >>>>> o MVC, tanto que pra mim (e pelo visto pra maioria aqui) não havia ficado >>>>> claro o papel de cada camada. >>>>> >>>>> ----- Original Message ----- From: "Newton Wagner" < >>>>> [email protected]> >>>>> To: "CodeIgniter Brasil" <[email protected]> >>>>> Sent: Thursday, February 05, 2009 5:54 PM >>>>> >>>>> Subject: Re: [CodeIgniter] MVC de verdade >>>>> >>>>> >>>>> E é por isso que alguns frameworks criam outra camada além do Model, a >>>>> de Persistência. Aí fica mais bem separado ainda! :). >>>>> >>>>> Realmente essa discussão já foi abordada aqui na lista... quem quiser >>>>> pode procurar no histórico. >>>>> >>>>> >>>>> 2009/2/5 Cleyverson Costa <[email protected]>: >>>>> >>>>>> OK Valeu! >>>>>> >>>>>> 2009/2/5 Eric Saboia (Fortes Informatica) < >>>>>> [email protected]> >>>>>> >>>>>>> >>>>>>> Cleyverson, >>>>>>> se você usa Active Record, teoricamente a mudança entre banco de >>>>>>> dados é >>>>>>> transparente. além disso, nada impede que você isole as querys das >>>>>>> regas de >>>>>>> negócio... da uma lida sobre DDD. >>>>>>> >>>>>>> Valeu! >>>>>>> >>>>>>> ----- Original Message ----- >>>>>>> From: Cleyverson Costa >>>>>>> To: CodeIgniter Brasil >>>>>>> Sent: Thursday, February 05, 2009 3:32 PM >>>>>>> Subject: Re: [CodeIgniter] MVC de verdade >>>>>>> Mas pensem, se eu colocar a validação dentro do model e quiser trocar >>>>>>> o >>>>>>> banco de dados...??? >>>>>>> >>>>>>> Isso vai me dar uma grande dor d cabeça... >>>>>>> >>>>>>> Regra de negocio eu chamo de validações, ifs e elses etc que vai >>>>>>> dizzer o >>>>>>> que fazer...pra mim nao ta tendo logica isso ficar dentro do model. >>>>>>> >>>>>>> Abraços >>>>>>> >>>>>>> 2009/2/5 Eric Saboia (Fortes Informatica) < >>>>>>> [email protected]> >>>>>>> >>>>>>>> >>>>>>>> Se os "criadores" do CI trabalham de forma errada, porque algum de >>>>>>>> nós >>>>>>>> faria diferente? Fiquei com a pulga atrás da orelha agora em relação >>>>>>>> ao CI >>>>>>>> :( >>>>>>>> >>>>>>>> ----- Original Message ----- >>>>>>>> From: Vinicius Cruz >>>>>>>> To: CodeIgniter Brasil >>>>>>>> Sent: Thursday, February 05, 2009 3:00 PM >>>>>>>> Subject: Re: [CodeIgniter] MVC de verdade >>>>>>>> Acho que aprendi tudo errado ... O_o >>>>>>>> O sistema aqui do trampo tá igual ao Bamboo. >>>>>>>> >>>>>>>> 2009/2/5 Luciano Soares <[email protected]> >>>>>>>> >>>>>>>>> >>>>>>>>> Mais informações >>>>>>>>> >>>>>>>>> http://java.sun.com/blueprints/patterns/MVC-detailed.html >>>>>>>>> >>>>>>>>> >>>>>>>>> Participants & Responsibilities >>>>>>>>> >>>>>>>>> The MVC architecture has its roots in Smalltalk, where it was >>>>>>>>> originally >>>>>>>>> applied to map the traditional input, processing, and output tasks >>>>>>>>> to the >>>>>>>>> graphical user interaction model. However, it is straightforward to >>>>>>>>> map >>>>>>>>> these concepts into the domain of multi-tier enterprise >>>>>>>>> applications. >>>>>>>>> >>>>>>>>> Model - The model represents enterprise data and the business rules >>>>>>>>> that >>>>>>>>> govern access to and updates of this data. Often the model serves >>>>>>>>> as a >>>>>>>>> software approximation to a real-world process, so simple >>>>>>>>> real-world >>>>>>>>> modeling techniques apply when defining the model. >>>>>>>>> View -The view renders the contents of a model. It accesses >>>>>>>>> enterprise >>>>>>>>> data through the model and specifies how that data should be >>>>>>>>> presented. It >>>>>>>>> is the view's responsibility to maintain consistency in its >>>>>>>>> presentation >>>>>>>>> when the model changes. This can be achieved by using a push model, >>>>>>>>> where >>>>>>>>> the view registers itself with the model for change notifications, >>>>>>>>> or a pull >>>>>>>>> model, where the view is responsible for calling the model when it >>>>>>>>> needs to >>>>>>>>> retrieve the most current data. >>>>>>>>> Controller - The controller translates interactions with the view >>>>>>>>> into >>>>>>>>> actions to be performed by the model. In a stand-alone GUI client, >>>>>>>>> user >>>>>>>>> interactions could be button clicks or menu selections, whereas in >>>>>>>>> a Web >>>>>>>>> application, they appear as GET and POST HTTP requests. The actions >>>>>>>>> performed by the model include activating business processes or >>>>>>>>> changing the >>>>>>>>> state of the model. Based on the user interactions and the outcome >>>>>>>>> of the >>>>>>>>> model actions, the controller responds by selecting an appropriate >>>>>>>>> view. >>>>>>>>> >>>>>>>>> 2009/2/5 Luciano Soares <[email protected]> >>>>>>>>> >>>>>>>>>> >>>>>>>>>> Bom nesse link da wikiedia em ingles explica o tradicional modelo >>>>>>>>>> MVC >>>>>>>>>> (que é diferente daquele implementado pelo CI devido as restrições >>>>>>>>>> de não >>>>>>>>>> criãção de observers em PHP) >>>>>>>>>> >>>>>>>>>> http://en.wikipedia.org/wiki/Model-view-controller >>>>>>>>>> >>>>>>>>>> As a design pattern >>>>>>>>>> >>>>>>>>>> MVC encompasses more of the architecture of an application than is >>>>>>>>>> typical for a design pattern.[citation needed] >>>>>>>>>> >>>>>>>>>> Model Is the domain-specific representation of the information on >>>>>>>>>> which >>>>>>>>>> the application operates. Domain logic adds meaning to raw data >>>>>>>>>> (for >>>>>>>>>> example, calculating whether today is the user's birthday, or the >>>>>>>>>> totals, >>>>>>>>>> taxes, and shipping charges for shopping cart items). Many >>>>>>>>>> applications use >>>>>>>>>> a persistent storage mechanism (such as a database) to store data. >>>>>>>>>> MVC does >>>>>>>>>> not specifically mention the data access layer because it is >>>>>>>>>> understood to >>>>>>>>>> be underneath or encapsulated by the model. View Renders the model >>>>>>>>>> into a >>>>>>>>>> form suitable for interaction, typically a user interface element. >>>>>>>>>> Multiple >>>>>>>>>> views can exist for a single model for different purposes. >>>>>>>>>> Controller >>>>>>>>>> Processes and responds to events (typically user actions) and may >>>>>>>>>> indirectly >>>>>>>>>> invoke changes on the model. >>>>>>>>>> >>>>>>>>>> 2009/2/5 Luciano Soares <[email protected]> >>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> Controladores se preocupam apenas com o fluxo das operações >>>>>>>>>>> dentro de >>>>>>>>>>> um modelo MVC. >>>>>>>>>>> >>>>>>>>>>> O modelo é onde ficam as regras de negócio. >>>>>>>>>>> >>>>>>>>>>> 2009/2/5 Cairo Noleto <[email protected]> >>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> No Rails, os métodos de um controller são chamadas de actions, >>>>>>>>>>>> que >>>>>>>>>>>> realmente passam a ação do que se vai fazer, em um crud temos as >>>>>>>>>>>> seguintes >>>>>>>>>>>> ações: >>>>>>>>>>>> Create, Read, Update e Destroy. >>>>>>>>>>>> >>>>>>>>>>>> no rails teríamos os seguintes métodos >>>>>>>>>>>> >>>>>>>>>>>> def index >>>>>>>>>>>> end >>>>>>>>>>>> def new >>>>>>>>>>>> end >>>>>>>>>>>> def edit >>>>>>>>>>>> end >>>>>>>>>>>> def save >>>>>>>>>>>> end >>>>>>>>>>>> def destroy >>>>>>>>>>>> end >>>>>>>>>>>> def show >>>>>>>>>>>> end >>>>>>>>>>>> >>>>>>>>>>>> Isso seria as ações da aplicação. >>>>>>>>>>>> >>>>>>>>>>>> "Um colaborador pode criar uma nova venda" sales/new >>>>>>>>>>>> "Um colaborador pode vizualizar uma venda" sales/1/show >>>>>>>>>>>> "Um colaborador pode editar uma venda" sales/2/edit >>>>>>>>>>>> "Um colaborador pode excluir uma venda" sales/1/destroy >>>>>>>>>>>> >>>>>>>>>>>> Claro que isso é a grosso modo, hoje existe formas melhores de >>>>>>>>>>>> se >>>>>>>>>>>> fazer isso no rails usando o conceito de rest web service. Mas >>>>>>>>>>>> idéia é >>>>>>>>>>>> justamente essa, fazer com que um determinado controle expresse >>>>>>>>>>>> apenas as >>>>>>>>>>>> ações >>>>>>>>>>>> >>>>>>>>>>>> 2009/2/5 Cleyverson Costa <[email protected]> >>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> Eric, >>>>>>>>>>>>> >>>>>>>>>>>>> De tudo o que ja li, o uso correto é da seguinte forma: >>>>>>>>>>>>> >>>>>>>>>>>>> Model >> Aqui tem basicamente as chamadas ao BD. Pense na se >>>>>>>>>>>>> seguinte situação. Opa minha empresa vai mudar de banco de >>>>>>>>>>>>> dados, entao as >>>>>>>>>>>>> consultas SQL deverao ser modificadas. Se vc tiver no model >>>>>>>>>>>>> apenas as >>>>>>>>>>>>> chamadas ao banco, vc modifica apenas esta camada. Vc modifica >>>>>>>>>>>>> os sql e todo >>>>>>>>>>>>> o resto continua funcionando. >>>>>>>>>>>>> >>>>>>>>>>>>> Controller >> Aqui ficam as regras de negocio e validações etc. >>>>>>>>>>>>> Tudo >>>>>>>>>>>>> fica aqui. Esta é sua camada de negocio. >>>>>>>>>>>>> >>>>>>>>>>>>> View >> Aqui fica a apresentação. Muita gente acaba colocando o >>>>>>>>>>>>> utf8_encode/decode na view, mas acho que nao seria uma boa >>>>>>>>>>>>> pratica. Quanto >>>>>>>>>>>>> mais limpo vc puder deixar a view (usando o controller) melhor. >>>>>>>>>>>>> >>>>>>>>>>>>> Depois de muito apanhar esta foi a forma que eu acabei achando >>>>>>>>>>>>> como >>>>>>>>>>>>> mais correta. Estou usando esta estrutura no site >>>>>>>>>>>>> www.ezmatch.net caso >>>>>>>>>>>>> queira dar uma olhada. >>>>>>>>>>>>> >>>>>>>>>>>>> Abraços >>>>>>>>>>>>> >>>>>>>>>>>>> 2009/2/5 Eric Saboia (Fortes Informatica) >>>>>>>>>>>>> <[email protected]> >>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> Pessoal, pedi antes de ontem um exemplo de aplicação bem feita >>>>>>>>>>>>>> em >>>>>>>>>>>>>> CI, me indicaram o http://www.bambooinvoice.org/ . Eu estava >>>>>>>>>>>>>> querendo checar >>>>>>>>>>>>>> o uso do MVC dentro de uma aplicação em CodeIgniter, mas me >>>>>>>>>>>>>> deparei com o >>>>>>>>>>>>>> mesmo "erro" que julgava estar acontecendo aqui na empresa. O >>>>>>>>>>>>>> controller tá >>>>>>>>>>>>>> cheio de regras de negócio, assim como validações e etc. Isso >>>>>>>>>>>>>> tudo não >>>>>>>>>>>>>> deveria estar no Model? Pois até onde sei o modelo representa >>>>>>>>>>>>>> tanto a >>>>>>>>>>>>>> persistência, quanto o negócio, enquanto o Controller é >>>>>>>>>>>>>> responsável >>>>>>>>>>>>>> unicamente pelo fluxo da aplicação. >>>>>>>>>>>>>> >>>>>>>>>>>>>> Opniões? >>>>>>>>>>>>>> Eric Saboia >>>>>>>>>>>>>> Desenvolvimento Web >>>>>>>>>>>>>> Fortes Informática (Fortaleza) >>>>>>>>>>>>>> Fone: (85) 4005-1111 >>>>>>>>>>>>>> [email protected] >>>>>>>>>>>>>> www.grupofortes.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 >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> -- >>>>>>>>>>>> Cairo Noleto >>>>>>>>>>>> ========= >>>>>>>>>>>> Cairo'sBlog - http://www.caironoleto.com/ >>>>>>>>>>>> Web developer - Add4 Comunicação - http://www.add4.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 >>>>>>> >>>>>>> _______________________________________________ >>>>>>> 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 >>>>> >>>>> _______________________________________________ >>>>> 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 >>>> >>>> >>> >>> >>> -- >>> 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

