Propostas para o MVC do Workflow
- Definir uma nova estrutura de diretórios para os processos
- Considerar a experiência do Serpro-BA;
- Analisar a estrutura de outros frameworks como o Cake e Simphony;
- Prever áreas para:
- Model-View-Controller;
- Ajax;
- Templates;
- Js;
- Imagens;
- Jobs;
- Classes de Negócio;
- Config;
- Facade (opcional);
- Dao;
- Serviços
- Log.
- Isolar os dados variáveis como log, documentação, compiled, smarty, graph, para facilitar a automação de deploy e a integração com IDEs;
- Substituir a função wf_include por factory.
- Criar um novo modelo de execução de atividades
- Suprimir o arquivo php da atividade;
- Dividir a atividade em model-view-controller
- Deverá existir um classe mãe para cada camada, com métodos para inicialização, finalização, cancelamento, execução, continuação de uma instância, execução de ajax, comunicação com o engine, etc;
- A classe da atividade deverá implementar os métodos que forem necessários;
- Criar uma nova classe run_activity, que será responsável por instanciar a classe controller da atividade e executá-la;
- Impedir que a controller tenha acesso aos atributos e métodos da run_activity;
- Usar uma função global para obter este objeto, de modo a garantir que somente o código da classe seja carregado;
- Testar se é seguro incluir o código da controller diretamente na run_activity;
- Criar um mecanismo que impeça o código do usuário criar objetos das classes do módulo e do engine. Como sugestão poderia ser uma análise no call_back procurando a origem da instanciação;
- Acomodar os processamentos pré e pós execução das atividades (agente de correio) em outro local do código;
- Criar plugins para processos;
- Transformar a conexão mainframe da Celepar em um plugin;
- Tranformar a factory do processo em estática
- Instanciar os objetos hoje pré-carregados, sob demanda;
- Eliminar a código compilado;
- Pensar se é viável liberar para o processo gravar dados na sessão;
- Prover uma maneira do workflow diferenciar o código do mvc antigo e do novo e executar corretamente cada ambiente.
- Executar a atividade com tratamento de exceções (try/catch).
- Criar uma camada de visualização
- Criar componentes para os diversos elementos de formulário, como textarea, inputs, etc;
- Prever inclusão da validação do componente;
- Implementar um componente container, que agrega componentes em uma mesma linha do template;
- Criar componente de ocultação;
- Criar um controle de acesso por componente, para ocultar elementos que não estejam disponíveis para um usuário;
- Prever também o encapsulamento dos plugins smarty criados para o workflow (select users, etc);
- Carregar no template os arquivos javascript indicados pelo desenvolvedor. Possibilitar associar funções javascript aos componentes;
- O objeto view deverá carregar os dados preparados na camada model e mesclar no template;
- A criação do objeto smarty ficará ao encargo da camada view;
- Criar uma função Js (goAjax) padrão para criar o objeto NanoController e adicionar a chamada virtual (addVirtualRequest);
- Simplificar os arquivos css e usar div ao invés de tabelas;
- Pensar na possibilidade de aproveitar os frameworks de css 960 ( http://960.gs) e blueprint ( http://www.blueprintcss.org) na camada de visualização.
- Tratamento e exibição de erros
- O submit fará uma chamada ao dispatch:
- O dispatch fará a verificação prévia de campos obrigatórios (1o. passo);
- Caso não tenha erros fará a validação dos componentes, via ajax (2o. passo);
- Caso não tenha erros irá chamar o método de validação em php, via ajax (3o. passo);
- O método de validação php terá um nome padrão e será responsável por validações de negócio;
- Caso existam erros na validação ajax, será polulado um array Js para exibição das mensagens no template (prever uma área para mensagens);
- Caso sem erros, será montado o array request na model e feita a submissão. Validar novamente pela model php;
- Existindo erros, estes serão adicionados a uma variável smarty, recarregado o template e as mensagens exibidas pela mesma função Js da validação ajax;
- Incluir no template padrão uma função Js para exibir os erros encontrados.
- Camada Model
- Criar métodos para verificação de segurança sobre dados entrados pelo usuário: sqlinjection, xss;
- Avaliar o htmlpurify e as soluções já utilizadas na run_activity e personalizadas nos processos já desenvolvidos;
- Revisar e padronizar as classes utilitárias: tratamento de datas, expressões regulares, tipos de dados;
- Incluir tratamento de erros na classe wf_db. Atualmente o workflow delega esta ação para o desenvolvedor;
- Retornar o erro produzido pelo adodb ou o resultado da operação (resultset);
- Criar automação de relatório genérico com a classe fpdf;
- Criar uma biblioteca Js para funções úteis para os processos que não existam nas biblioteca de terceiros acessíveis pelo workflow.
- Criar um local para definição das constantes do processo
- Utilizado para array de mensagens;
- Constantes operacionais;
- Schema de banco de dados;
- Qualquer outro parâmetro de configuração global do processso que seja necessário.
- Verificar as possibilidades: pode ser no arquivo shared.php, ou em um arquivo config do processo, ou ainda em uma nova aba na adminstração do processo;
- Padronizar os índices do array Requests com um prefixo, para facilitar a transferência entre as camadas;
- Criar uma camada para mapeamento objeto-relacional
- Considerar a experiência do Serpro-BA com o Propel.
Download in other formats: