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

