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

Responder a