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