Yii Framework Forum: Class de Services - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Class de Services Rate Topic: -----

#1 User is offline   catataw 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 21
  • Joined: 22-March 09

Posted 30 November 2009 - 06:32 AM

Salve, Salve pessoal, analizando e pensando bem acho que minhas class de controller tem muita responsabilidade, com isso gostaria de ta abastraindo para uma class de services assim futuramente posso aproveitar em outras partes da aplicacao ou ate mesmo fazendo um facade de webservices que chama estes services, gostaria de opnioes de vcs se ja tiveram que fazer algo assim , como que fizeram , oque indica.
0

#2 User is offline   Armando 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 80
  • Joined: 11-November 08
  • Location:Brazil - Rio de Janeiro

Posted 01 December 2009 - 05:22 AM

Eu tenho uma classe "BaseController" que extende a classe CController.
Tudo que preciso para ser reaproveitado em todo o sistema eu adiciono em "BaseController", pois todas as "Classes de Controle" extende a classe "BaseController".

A classe base para todo o sistema:
<?php
class BaseController extends CController 
{
   # Aqui adicionei um valor padrao para o PageSize, que será usado no sistema inteiro, e se eu quiser mudar para uma determinada "view",  
   # posso alterar diretamente na própria classe controle adicionando: public $pageSize = 30;
   public $pageSize = 14; 
   ...
}
?>


Extendendo a classe BaseController:
<?php
class CalendarioEscolar extends BaseController 
{
   ...
}
?>

Você também pode melhorar esse esquema, veja outro exemplo:

Pastas e arquivos
===============
controllers
    |- secretaria
          |--- BaseSecretariaController.php
          |--- Classe1Controller.php
          |--- Classe2Controller.php
          |--- Classe3Controller.php
    |- BaseController.php

Veja então que as Classes: Classe1Controller, Classe2Controller, Classe3Controller que estão na pasta "secretaria", vão extender a classe "BaseSecretariaController" e que "BaseSecretariaController" extende "BaseController".

Com isso você deixa a responsabilidade para as classes "BaseSecretariaController" e "BaseController".

Espero que este exemplo seja útil para todos. Abs!
0

#3 User is offline   catataw 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 21
  • Joined: 22-March 09

Posted 01 December 2009 - 07:57 AM

Ola Armando, interessante esta sua abordagem, na verdade esta parte de controle eu tambem tenho uma class base pois nela eu ja implemento os filtros de permissao, ja faz o crud dinamicamente unica coisa que precisa definir e a metaclass, acho que o controller do mvc seria para organizar o fluxo da aplicacao nao ter regra de negocio, por isso que pensei nas class de services ou usando o padrao GOF a class "controller" que nao e a mesmo controller do mvc veja por ex neste cenario vc realiza uma venda dae tem que dar baixa no estoque, no seu VendaContoller teria um metodo finalizarvenda dae este metodo pegaria os dados da venda os itens da venda, grava no banco e faz a baixa no estoque, isso ta no controller do mvc, agora vc quer disponibilzar um websevices no seu webservices tem o metodo finalizarvenda que faz a mesma coisa pega os dados da venda, os intens da venda, grava no banco e faz a baixa no estoque.

como resolver esta "duplicacao" de codigo ? por isso que imagino em ta utilizando uma class services
que posso chamar tanto no mvc como no webservices tipo servicesVenda que teria o metodo finalizarvenda que passaria para ela o processo de finalizar a venda e dar a baixa no estoque, nao sei se esta e a melhor abordagem por isso que trouxe a discusao para o forum para ve se ja passaram por esta situacao e como resolveram ...

(;


att
0

#4 User is offline   Armando 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 80
  • Joined: 11-November 08
  • Location:Brazil - Rio de Janeiro

Posted 01 December 2009 - 01:57 PM

Sua abordagem seria uma ótima saída para o processo de finalização das vendas.

Eu faria o mesmo que você, criaria a classe "service" passando pra ela o método finalizarVenda.

Na sua classe VendaContoller você precisaria importar a classe "service":
<?php 
Yii::import('application.controllers.service');
class VendaController extends BaseController {
  ...
  // você pode instanciar a classe service e usar outros métodos
  $service = new service();
  $service->baixaNoEstoque($venda);

}
?>


Todos os controlles que precisarem da classe service, esta terá que ser importada e poderá usar todos os métodos que se fizerem nescessário.
0

#5 User is offline   davi_alexandre 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 104
  • Joined: 08-July 09
  • Location:Guarulhos - São Paulo

Posted 01 December 2009 - 09:31 PM

Pessoal, as actions não precisam ser métodos de um controller. Uma action também pode ser uma classe que extende CAction. Dessa forma é possível utilizar uma mesma ação em varios controllers, apenas sobrescrevendo o método actions:

class MeuController extends CController {
    public function actions() {
        return array(
            'minha_action' => 'application.actions.MinhaAction',
        );
    }
}

0

#6 User is offline   Daniel Augusto Bastos 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 347
  • Joined: 25-May 09
  • Location:Rio de Janeiro - Brasil

Posted 02 December 2009 - 08:40 AM

View Postdavi_alexandre, on 01 December 2009 - 09:31 PM, said:

Pessoal, as actions não precisam ser métodos de um controller. Uma action também pode ser uma classe que extende CAction. Dessa forma é possível utilizar uma mesma ação em varios controllers, apenas sobrescrevendo o método actions:

class MeuController extends CController {
    public function actions() {
        return array(
            'minha_action' => 'application.actions.MinhaAction',
        );
    }
}



Putz. Nada haver com a questão do tópico, mas tu acabou de matar a pau uma dívida minha :)


Entrei aqui pra procurar justamente se tinha como fazer isso.


Every solution creates a problem.
twitter.com/nenhumnick
0

#7 User is offline   Armando 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 80
  • Joined: 11-November 08
  • Location:Brazil - Rio de Janeiro

Posted 02 December 2009 - 10:16 AM

View Postdavi_alexandre, on 01 December 2009 - 09:31 PM, said:

class MeuController extends CController {
    public function actions() {
        return array(
            'minha_action' => 'application.actions.MinhaAction',
        );
    }
}


Desta forma acima, cada Action seria um arquivo e no controller deveria fazer o "override" de actions().
Confira o link: Opção Action

Isso vai depender do tamanho, diversidade da aplicação e do gosto do desenvolvedor. No caso de grande volume e diversidade, eu ficaria somente com uma classe de serviço.
0

#8 User is offline   catataw 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 21
  • Joined: 22-March 09

Posted 03 December 2009 - 05:03 AM

Diaaaa, bem acho que nos casos das action nao resolveria meu caso, acho que vou seguir a abordagem de usar uns class de "services"
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users