Changes between Initial Version and Version 1 of WF/camadacontroller


Ignore:
Timestamp:
07/07/08 16:40:57 (16 years ago)
Author:
viani
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • WF/camadacontroller

    v1 v1  
     1= Camada de Controle (Control) = 
     2 
     3 
     4 
     5Por definição, a camada de Controle faz o gerenciamento entre o usuário, as Views (interfaces) e o Model (funções do sistema). Ela  
     6deve saber apenas quais são as funções do sistema e não como implementá-las. Será responsável por receber as  
     7solicitações de serviços vindas do usuário, chamar a implementação do Model correspondente e com base na resposta, encaminhar uma interface (View) adequada de volta ao usuário. 
     8 
     9 
     10Em hipótese alguma poderá existir formatação de dados nesta camada, bem como não poderão estar implementadas regras do negócio, como por exemplo acesso ao banco de dados. 
     11 
     12Exemplo de código de uma camada Controller: 
     13 
     14{{{ 
     15<?php 
     16/** 
     17 * Gerencia atividade Compor do processo Atos Administrativos. 
     18 * @author carloseduardo 
     19 * @author viani 
     20 * @author aleheil 
     21 * @version 1.4 
     22 * @license http://www.gnu.org/copyleft/gpl.html GPL  
     23 * @package Atos_Administrativos. 
     24 */ 
     25class ComporController extends Controller 
     26{  
     27        /** 
     28         * Acao padrao/inicial da atividade. 
     29         * @return void 
     30         * @access public 
     31         */ 
     32        function __default () 
     33        {                
     34                $this->model->defaultAction(); 
     35                $this->loadViewVars(); 
     36                $this->showForm($this->COMPOR); 
     37        } 
     38         
     39        /** 
     40         * Executa a ação salvar da atividade compor e encerra a execução da atividade. 
     41         * @return void 
     42         * @access public  
     43         */ 
     44        function salvar() 
     45        {                
     46                if ( ! $this->model->salvarAction()) 
     47                { 
     48                        $this->loadViewVars(); 
     49                        $this->showForm($this->COMPOR);  
     50                } 
     51        }     
     52         
     53        /** 
     54         * Execucao da atividade. 
     55         * @param $action Servico (acao) solicitado 
     56         * @return void 
     57         * @access private  
     58         */  
     59        function run($action) 
     60        {        
     61                $this->model->DAO->connect ( ); 
     62                $this->dispatch($action); 
     63                $this->model->DAO->disconnect ( );               
     64    } 
     65}  
     66?> 
     67}}} 
     68 
     69Neste exemplo, a função run() recebe como parâmetro a ação a ser executada, e o método dispatch() está encarregado de executar a função de controle correspondente. Assim, se for passada a ação 'salvar' será executado o método Salvar() desta mesma classe. Antes disto, porém foi realizada a conexão com o banco de dados, através do comando $this->model->DAO->connect(). 
     70 
     71Caso nenhuma ação seja recebida, será executado o método !__default(), também definido nesta classe. 
     72 
     73Note então que para cada ação que for necessária na atividade, deverá existir uma função correspondente na camada Controller. 
     74 
     75Analisando a função Salvar(), vemos que a mesma faz uso da camada Model para executar a operação de salvamento (negócio) e caso obtenha sucesso irá carregar os dados na camada View e a seguir definir qual o template a ser usado para mostrar os dados. 
     76 
     77Tudo que foi falado até aqui sobre a camada Controller diz respeito ao código da atividade, mas note que na definição da classe Controller, existe uma heranca de outra classe, representado pela cláusula 'extends Controller'. Isso significa que existe uma classe superior (pai) da qual a classe em questão herda código. Na classe pai existem métodos que são comuns a todos as classes Controller das atividades. Esta maneira de programar por objetos, com herança, é fundamental para evitar a repetição de código. 
     78 
     79Continuando com o exemplo, teremos uma classe Controller, a nível de processo, cujo código está a seguir: 
     80 
     81{{{ 
     82<?php 
     83/** 
     84 * Gerencia o processo Atos Administrativos 
     85 * @author carloseduardo 
     86 * @author viani 
     87 * @author aleheil 
     88 * @version 1.4 
     89 * @license http://www.gnu.org/copyleft/gpl.html GPL  
     90 * @package Atos_Administrativos 
     91 */ 
     92class Controller extends BaseController 
     93{        
     94    /** 
     95     * @var string Tela inicial da atividade Compor 
     96     * @access public 
     97     */ 
     98        var $COMPOR = 'Compor.tpl'; 
     99 
     100        /** 
     101     * @var string Tela da atividade Enviar 
     102     * @access public 
     103     */ 
     104        var $ENVIAR = 'Enviar.tpl'; 
     105 
     106        /** 
     107     * @var string Tela da atividade Consultar 
     108     * @access public 
     109     */ 
     110        var $CONSULTAR = 'Consultar.tpl'; 
     111 
     112        /** 
     113     * @var string Tela da atividade Alterar 
     114     * @access public 
     115     */ 
     116        var $ALTERAR = 'alterar.tpl'; 
     117 
     118        /** 
     119     * @var string Tela da atividade Visualizar 
     120     * @access public 
     121     */ 
     122        var $VISUALIZAR = 'visualizar.tpl';      
     123 
     124        /** 
     125     * @var string Tela da atividade Imprimir 
     126     * @access public 
     127     */ 
     128        var $IMPRIMIR = 'imprimir.tpl'; 
     129         
     130        /** 
     131     * @var string Tela da atividade Manter Categorias 
     132     * @access public 
     133     */ 
     134        var $MANTER = 'Manter_Categorias.tpl'; 
     135 
     136        /** 
     137     * Process startup settings 
     138     * @param object $model Model layer instance for activities business logic 
     139     * @param array $env MVC environment settings  
     140     * @return object 
     141     * @access protected 
     142     */  
     143        function Controller(&$model , &$env) 
     144    { 
     145        $this->super(&$model , &$env); 
     146        $this->assign('inbox', $this->model->getWfProperty('wf_workflow_path') .  
     147                       SEP . 'index.php?start_tab=0'); 
     148        $this->assign('processes', $this->model->getWfProperty('wf_workflow_path') .  
     149                       SEP . 'index.php?start_tab=1'); 
     150        $this->assign('activity_title', 'Atos Administrativos'); 
     151    }            
     152} 
     153?> 
     154}}} 
     155 
     156Na classe de Controle, a nível de processo, representado pelo exemplo anterior, iremos colocar tudo aquilo que for comum ao Controle das atividades. A classe começa definindo as constantes que representam os templates do processo. Depois implementa o método construtor 'Controller', que no exemplo, está definindo três variáveis da camada View, que ficarão disponíveis para quem extender a classe. 
     157 
     158Mais uma vez observamos a existência de uma cláusula 'extends' que neste caso está extendendo a classe BaseController. Essa classe está definida a nível de módulo e contém métodos de uso geral para atividades de Controle, que pode ser acessados por qualquer classe que a extenda: 
     159 
     160 
     161 
     162 
     163 
     164'''Estrutura:''' 
     165 
     166 
     167 
     168  * Nível de módulo: 
     169 
     170   * Representado pela classe !BaseController; 
     171 
     172   * Contém um atributo para armazenamento de instância da camada View (!BaseController::view); 
     173 
     174   * Contém um atributo para controlar qual template (interface) será exibido (!BaseController::templateFile); 
     175 
     176   * Contém um atributo para armazenamento de instância Model de atividade (!BaseController::Model); 
     177 
     178   * Contém método que recupera os dados produzidos pela camada Model e os envia para a camada View (arquivos tpl, pdf, xml, etc) exibí­-los e formatá-los (!BaseController::loadViewVars()); 
     179 
     180   * Contém método que cancela a execução da requisição atual (!BaseController::cancelar()); 
     181 
     182   * Contém método que executa a ação inicial/padrão de cada atividade, opcional ser vazio e opcional ser sobrescrito (!BaseController::__default()); 
     183 
     184   * Contém método abstrato (deve ser sobrescrito) que executa as atividades (!BaseController::run($action)); 
     185 
     186   * Contém construtor da camada Controller, recebendo como argumento instância Model de atividade. 
     187 
     188 
     189 
     190 
     191  * Nível de atividade: 
     192 
     193   * Representado pela classe !NomeAtividadeController; 
     194 
     195   * Gerencia comunicação entre a atividade (sistema) e o usuário; 
     196 
     197   * Contém método homônimo para cada uma das ações da atividade; 
     198 
     199   * Contém implementação para método herdado run ($action); 
     200 
     201   * Contém, quando necessário, implementação para método herdado __default (). 
     202