Ficou claro e objetivo.
Cairo, vc trabalha na ADD4? Junto com o Jesus (vulgo Klederson de Nazaré)? Se sim, faz um favor pra mim. Manda ele pro inferno. Estou esperando ele limpar meu banheiro! Se não, deixa quieto. De: [email protected] [mailto:[email protected]] Em nome de Cairo Noleto Enviada em: segunda-feira, 9 de fevereiro de 2009 13:17 Rafael Para: CodeIgniter Brasil Assunto: Re: [CodeIgniter] MVC de verdade Bom, eu fiz uma explicação breve, talvez mais clara (ou não) sobre MVC no meu blog http://www.caironoleto.com/2009/02/09/cuidado-com-model-view-controller/ 2009/2/7 Beto <[email protected]> essa lista tem ficado cada vez mais interesante! :D tbm tinha aprendido q as validacoes tinha q ser feito no modelo e nao nos controles, temos muito pano p manga :D []´s - - - - - - - - - - - - - - - - - - - - - Luiz Alberto S. Ribeiro [ Beto ] http://beto.euqueroserummacaco.com 2009/2/7 Eric Saboia (Fortes Informatica) <[email protected]> Não recebi. ----- Original Message ----- From: Marcus Cavalcanti <mailto:[email protected]> To: CodeIgniter Brasil <mailto:[email protected]> Sent: Friday, February 06, 2009 5:24 PM Subject: Re: [CodeIgniter] MVC de verdade Mandei com outra thread... em um arquivo anexo, se alguem nao receber, me avisa.. 2009/2/6 Marcus Cavalcanti <[email protected]> Vou fazer aqui um exemplo e mando.. 2009/2/6 Luciano Soares <[email protected]> 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 <mailto:[email protected]> To: CodeIgniter Brasil <mailto:[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 <http://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 <http://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 -- 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 -- 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

