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
_______________________________________________ Lista mailing list [email protected] http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br

