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

Responder a