E, realmente, a abordagem do Marcus foi bem esclarecedora.
Minha primeira experiência com MVC foi justamente com o CI. E pelo jeito
muita gente aprendeu errado.

Concordo que um artigo exemplificado seria de mais valia para toda a
comunidade. De repente, a gente traduz e manda pra o Dark também. =D

Vinicius

2009/2/6 Kadu Azevedo <[email protected]>

>  Seria tri a construção de um artigo sobre este assunto, porque isso
> realmente é muito interessante. De certa forma, muda a concepção de MVC de
> muitos.
>
>
>  ------------------------------
>
> *De:* [email protected] [mailto:
> [email protected]] *Em nome de *Luciano Soares
> *Enviada em:* sexta-feira, 6 de fevereiro de 2009 13:13
> *Para:* CodeIgniter Brasil
> *Assunto:* Re: [CodeIgniter] MVC de verdade
>
>
>
> 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
>
>
_______________________________________________
Lista mailing list
[email protected]
http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br

Responder a