Changes between Version 1 and Version 2 of WF/camadacontroller


Ignore:
Timestamp:
07/07/08 17:30:06 (16 years ago)
Author:
viani
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • WF/camadacontroller

    v1 v2  
    11= Camada de Controle (Control) = 
    2  
    3  
    42 
    53Por definição, a camada de Controle faz o gerenciamento entre o usuário, as Views (interfaces) e o Model (funções do sistema). Ela  
    64deve saber apenas quais são as funções do sistema e não como implementá-las. Será responsável por receber as  
    7 solicitaçõ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  
     5solicitações de serviços vindas do usuário, chamar a implementação da Model correspondente e com base na resposta, encaminhar uma interface (View) adequada de volta ao usuário. 
    96 
    107Em 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. 
     8 
     9Os arquivos das classes de Controle devem ter nome no formato class.!AtividadeController.inc.php, e ficam gravados no diretório 'code' da estrutura de diretórios apresentada anteriormente, ou então estão acessíveis na aba 'Includes' da interface de codificação. 
    1110 
    1211Exemplo de código de uma camada Controller: 
     
    6766}}} 
    6867 
    69 Neste 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(). 
     68Neste 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(), mas isto é opcional. 
    7069 
    7170Caso nenhuma ação seja recebida, será executado o método !__default(), também definido nesta classe. 
    7271 
    73 Note então que para cada ação que for necessária na atividade, deverá existir uma função correspondente na camada Controller. 
     72Note que para cada ação que for necessária na atividade, deverá existir uma função correspondente na camada Controller. 
    7473 
    7574Analisando 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. 
    7675 
    77 Tudo 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. 
     76Tudo 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 é filha. 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. 
    7877 
    79 Continuando com o exemplo, teremos uma classe Controller, a nível de processo, cujo código está a seguir: 
     78Continuando com o exemplo, teremos uma classe Controller, a nível de processo, cujo código está a seguir. Esta classe também fica armazena no diretório 'code', e nome do arquivo deve seguir o formato class.Controller.inc.php 
    8079 
    8180{{{ 
     
    154153}}} 
    155154 
    156 Na 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. 
     155Na 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 as classes que a extenderem. 
    157156 
    158 Mais 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: 
     157Mais 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 estão disponíveis para as classes filhas. 
    159158 
     159Segue uma explicação dos atributos da classe !BaseController: 
    160160 
     161 * view: objeto da classe Smarty que representa a camada View 
     162 * templateFile: armazena o nome do template em uso pela camada View 
     163 * model: objeto da classe Model da atividade 
    161164 
     165Métodos da classe !BaseController: 
    162166 
    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  
     167 * showForm: troca o template em uso; 
     168 * syncVars: transfere todos os atributos da camada Model para a Camada View; 
     169 * loadViewVars: recupera os dados produzidos pela camada Model e os transfere para a camada View; 
     170 * assign: seta o valor de uma variável da camada View; 
     171 * cancelar: aborta a execução da atividade corrente; 
     172 * dispatch: executa a ação solicitada pelo usuário;