wiki:WF/detalhamento

Version 2 (modified by fabianok, 14 years ago) (diff)

--

Módulo de Desenvolvimento de Aplicações para o Expresso utilizando o Padrão MVC

Introdução

O Expresso Livre é um projeto de software livre iniciado em abril de 2004 pela Companhia de Informática do Paraná \cite{Silva:2008}, segundo o site www.expressolivre.org \cite{expressolivre:2010} ele "é uma solução completa de comunicação que reúne Email, Agenda, Catálogo de Endereços, Workflow e Mensagens Instantâneas em um único ambiente.". O sistema tem suas origens como uma customização do software E-GroupWare, desenvolvido e mantido por uma grande comunidade de colaborares voluntários \cite{Egrupware:2010}.

Apesar de fornecer muitos recursos é comum o surgimento de necessidades específicas da corporação que não são atendidas pelas ferramentas disponíveis no ambiente Expresso. Para suprir esta carência muitos desenvolvedores utilizarem o módulo Workflow para criarem aplicações personalizadas que necessitam recursos do ambiente. Este caminho muitas vezes não é o mais adequado, pois varias das necessidades de implementação não tem características de workflow, no entanto a esta é maneira mais simples de integração dos recursos disponíveis, particularmente os dados de usuários, a uma aplicação que seja executada no ambiente.

O sistema proposto neste trabalho é um módulo para desenvolvimento rápido de aplicações para ser utilizado de forma integrada ao ambiente Expresso, substituindo o módulo workflow. Utilizando a ferramenta proposta o programador pode criar aplicações para atender a várias necessidades corporativas utilizando as funcionalidades do ambiente expresso e de fluxo de processos no modelo de workflow. O sistema deverá também oferecer integração simplificada com banco de dados PostgreSQL e uma interface de desenvolvimento de páginas baseada na metodologia WYSWIG.

Modelos Utilizados

Workflow

O modulo Workflow é utilizado para executar fluxos pré-definidos de uma atividade utilizando a estrutura organizacional cadastrada no ambiente Expresso. Segundo classificação proposta por Nicolao \cite{Nicolao:1996} o modelo de workflow do moódulo do expresso é caracterizado como do tipo administrativo, pois "envolve processos repetitivos com regras de coordenação de tarefas simples, tal como roteamento de um relatório de despesa ou requisição de viagem, controladas por um processo de autorização". Estas são necessidades que devem ser atendidas pelas próprias necessidades do ambiente corporativos a que se dispõe a atender o ambiente Expresso.

O uso de gerenciamento de fluxos pode ser implementado como uma ferramenta de apoio a sistemas que tenham características de workflow, passando a ser utilizado não como módulo do sistema mas como infraestrutura disponível pelo ambiente para ser utilizada no desenvolvimento de aplicações. Esta alteração na forma de utilização de fluxos permite maior flexibilidade do ambiente como um todo além de maior encapsulamento das atividades.

Por outro lado é visível a necessidade de uma aplicação simplificada para a manutenção e gerenciamento dos processos de workflow dentro das organizações. A retirada deste módulo tende a provocar impactos negativos entre os usuários que já estão habituados com o uso das ferramentas. Para evitar estes problemas e dadas as características do sistema de desenvolvimento de aplicações proposta é inevitável a existência de uma aplicação de gerenciamento e manutenção de processos de workflow. Esta aplicação deve ser parte integrante do módulo de desenvolvimento de aplicações.

Parão MVC

O modelo Model View Controller (MVC) apesar de muito valorizado não é um conceito novo, em 1979 Reenskaug \cite{Reenskaug:1979} publica artigo apresentando os conceitos de modelo, controle e visualização. Com a evolução da internet e o grande uso de aplicações baseadas no padrão Web o uso de MVC popularizou-se significativamente e atualmente é um padrão de projeto amplamente utilizado pelos desenvolvedores de aplicações.

O padrão propõe a separação das responsabilidades da aplicação em componentes. O modelo é uma representação da camada de negócios, são os componentes que utilizam as regras da solução do problema específico, componentes de visualização são responsáveis por fornecer interface com o usuário final, geralmente uma interface humano-computador e finalmente os componentes de controle provem uma ponte entre os componentes de visualização e modelo, tendo como responsabilidade validar os acessos e encaminhar as requisições aos componentes adequados do modelo.

O Sistema para Desenvolvimento de Aplicações para o Ambiente Expresso utiliza o padrão MVC para a construção do mecanismo do módulo e as aplicações desenvolvidas pelos clientes também devem respeitar este padrão. A geração automática de aplicações constrói uma estrutura básica de pastas e arquivos que permite que o desenvolvedor consiga visualizar com facilidade onde colocar os componentes que serão utilizados pela aplicação a ser desenvolvida.

Módulo para Desenvolvimento de Aplicações para o Ambiente Expresso, MoDA2E

O módulo proposto respeita o padrão MVC e propõe independência entre os componentes das camadas de controle e modelo da visualização de tal forma que alterações nas classes de uma camada tenham impacto mínimo nas classes de outra camada. Este conceito de independência é, por consequência, estendido a integração com os recursos do ambiente Expresso tornado os aplicativos resistentes a mudanças de versão.

Como o desenvolvimento dos aplicativos utiliza apis para acessar as funcionalidades do ambiente apenas alterações nas bibliotecas podem influenciar no comportamento das aplicações o que oferece também independência a alterações feitas no Expresso. Esta característica da segurança ao desenvolvedor de aplicativos no sentido, que mesmo que este não tenha controle das alterações no ambiente, seus programas continuarão tendo as mesmas funcionalidades.

O desenvolvedor utiliza o framework de desenvolvimento definindo as funcionalidades que deseja dar a aplicação em um script, podendo utilizar uma interface gráfica para gerar este arquivo, que inclui informações de conexão com banco de dados, workflow e perfis de usuários. A partir do script de configuração é gerado o ambiente da aplicação contendo uma estrutura de pastas baseadas no modelo e código básico para o funcionamento da aplicação.

O desenvolvedor pode então criar suas interfaces humano-computador, utilizando a ferramenta de criação fornecida com o framework, ou integrar aplicativos utilizando chamadas http padronizadas.

Grande parte das necessidades do programa são geradas automaticamente pela ferramenta de "Geração de Aplicativos", reduzindo significativamente o tempo de analise e desenvolvimento. O módulo utiliza o padrão de arquitetura de software Model-view-controles (MVC), que separa a lógica do negocio da interface humano-computador, fornecendo um ambiente de fácil manutenção e alto desacoplamento.

O módulo pode ser utilizado também como uma ferramenta capaz de prover serviços podendo ser integrada com aplicações já existentes ou em desenvolvimento que necessitem implementar funcionalidades fornecidas por sistemas ativos no módulo.

Camada de Visualização

O desacoplamento da camada de visualização oferece ao desenvolvedor a possibilidade de independência das interfaces gráficas do ambiente Expresso. Este desacoplamento é um requisito importante uma vez que alterações nas ferramentas de interface do Expresso podem provocar erros ou alterar a funcionalidades de scripts javascript ou configurações de estilo tendo em vista que muitas vezes a comunidade responsável pela manutenção e desenvolvimento do Expresso Livre não tem conhecimento sobre a funcionalidade das aplicações do módulo.

A geração das interfaces da camada pode ser feita pelo processamento de templates gerados pela ferramenta de desenvolvimento rápido e convertidos para o formato HTML. Estes templates contem informações sobre leiaute e mesclamento de dados obtidos no objeto gerado na chamada da execução. A ferramenta é capaz de processar vários componentes HTML e é capaz de minimizar o trafego de dados utilizando chamadas que retornam apenas os dados que necessitam ser redesenhados na tela evitando a necessidade de gerar novas páginas a cada chamada.

As telas disponíveis aos cliente e promovem a sensação deste estar utilizando uma aplicação desktop com as facilidades e os padrões comuns em páginas disponíveis na Web. Esta forma de apresentação minimiza o tempo de aprendizagem no uso das aplicações quando o usuário está familiarizado com uso de navegadores para acesso a Internet. Evitando carregar todo conteúdo das páginas a cada chamada significa significativa melhora de performance e recursos extras de interatividade.

Comunicação Entre as Camadas

Para ampliar as possibilidades de uso do sistema as camadas de controle e modelo tem forte acoplamento, atuando como um serviço capaz de receber dados, processa-los e gerar um resultado para ser entregue ao cliente. Apesar do desacoplamento da camada de visualização do ponto de vista das ferramentas de desenvolvimento a execução de uma rotina somente faz sentido se for acionada por um cliente que assume sempre o papel da camada de visualização. Existe então um desacoplamento entre a camada de visualização e as as camadas de controle e modelo do ponto de vista do desenvolvimento da aplicação mas a execução de qualquer rotina implica na necessidade de um protocolo de comunicação para estabelecer o vinculo entre as camadas.

A comunicação entre o cliente que solicita a execução de determinada atividade não é feita de forma única. A aplicação adota um protocolo para o recebimento das informações e outro para o retorno dos dados. Esta opção foi feita para facilitar o desenvolvimento de aplicações utilizando a Web, todo pedido para a camada de controle é feita via requisição http ou https utilizando post ou request e retorno é feito pelo envio de um documento XML puro, ou HTTP utilizando o mesmo protocolo que inciou a aplicação.

Como as ferramentas de desenvolvimento Web mais populares implementam métodos para manipulação de informações fornecidas em arquivos no formato XML este foi adotado como padrão para a implementação de troca entre a camada de controle e o cliente. Internamente a camada de controle e de modelo compartilham os dados por meio de objetos que são passados entre as classes e os métodos. Quando a rotina foi finalizada esta retorna um objeto contendo as informações que devem ser retornadas para o cliente populadas em suas propriedades e retorna este objeto para a camada de controle que deve chamar um método capaz de mapear as propiedades do objeto para tags XML.

Factory

O uso de recursos do ambiente não devem ser acessados diretamente pois o acesso depende de validação de permissões e implementações diferenciadas de construtores das classes. Para padronizar o processo de uso de recursos a ferramenta de construção de aplicativos para o ambiente Expresso utiliza uma classe que implementa o padrão factory \cite{Larman:2005} para instanciar o recurso solicitado. O uso da classe factory permite ao desenvolvedor acessar as apis permitindo acesso apenas a métodos disponíveis as aplicações e protegendo os recursos do módulo.

A factory é utilizada estaticamente e fornece dois métodos públicos newInstance e getInstance que tornam uma instancia do objeto que esta cria. O metodo newInstance é utilizado para gerar um objeto com os atributos com os valores padrão no momento da criação do mesmo, já getInstance cria uma instância do objeto caso esta não existe e recupera uma instância existente caso contrario, pode ser encarado como uma variação do padrão singleton.

Criação de Programas para o Módulo

O MoDA2E prepara o ambiente e gera a estrutura de pastas e arquivos para o desenvolvedor. O módulo sempre instância a classe controll.class.php na pasta controll contida na pasta raiz da aplicação que é criado pelo construtor de aplicações. Esta classe é a forma como o MoDA2E estabelece comunicação com o cliente, atuando como um tipo de extensão da camada de controle do Módulo. Na classe controll.class.php esta implementado o método default, chamado pelo construtor da classe abstrata antecessora de controll.class.php, que é sempre executado na criação do objeto. O desenvolvedor deve descrever neste método o funcionamento padrão da classe.

A camada de controle instância componentes do modelo que executam conforme o negocio que deve ser resolvido de acordo com a rotina e parâmetros informados pelo cliente. Concluindo a atividade o ocorrendo erro durante a execução objeto de controle recebe um objeto, preferencialmente contendo apenas atributos e métodos para manuseio dos mesmos, que deve ser serializado para uma representação em XML. Em caso de erro a camada o desenvolvedor deve instanciar uma classe de erro e retornar este objeto para ser convertido em XML.

A classe de controle da aplicação retorna sempre um documento XML para o cliente que solicitou a rotina. Este documento pode representar tanto um objeto que representa o resultado da execução da rotina quanto a representação de um erro ocorrido durante o processo.

Execução de Aplicação

A chamada a uma aplicação é feita pela requisição a alguma das aplicações do modulo via chamada utilizando os protocolos HTTP ou HTTPS. Ao receber a solicitação o servidor executa as instruções contidas no arquivo de controle do Expresso, instancia a classe de controle da aplicação, prepara o ambiente e passa a executar as instruções da aplicação cliente. A o termino da execução das aplicação cliente esta fornece um objeto contendo todos os dados necessários para serem apresentados ao cliente.

Qualquer erro de execução da aplicação é tratado pela camada de controle, e sempre que ocorrer gera uma interface padrão para ao cliente que solicitou a atividade. Se a resposta para o cliente é feita por XML retornará uma marcação de erro detalhando textualmente em linguagem de leitura humana o ocorrido. No caso de retorno HTML a interface de controle carrega a página de erro, definida pelo framework, com a mensagem de erro e retorna a página para o usuário.

A camada de controle é capaz de converter classes para formato XML proporcionando que a aplicação retorne uma interface padronizada para o usuário sem custo de desenvolvimento. As solicitações feitas por aplicações que necessitam do retorno de um serviço são atendidas pelo retorno de um objeto representado pelo arquivo XML. Solicitações que não necessitem de geração de interface como requisições AJAX também podem fazer uso deste recurso.

Acesso a Recursos

Para acessar recursos do ambiente Expresso o desenvolvedor deverá utilizar a factory e utilizar diretamente os recursos do objeto por ela gerado. Para isso o desenvolvedor tem que conhecer detalhes sobre a utilização do recurso.

Quando a aplicação necessitar de recursos de banco de dados para persistir informações do negocio que esta tratando poderá utilizar as ferramentas de acesso a dados oferecida pelo ambiente. Este conjunto de componentes é gerado dinâmicamente no momento da criação da aplicação se o desenvolvedor informar a estrutura de dados a ser utilizada pelo aplicativo que está criando. O acesso ao banco de dados também pode ser modelado pelo cliente independentemente dos recursos oferecidos pelo módulo.

O MoDA2E oferece uma camada de persistência de dados baseada no padrão Active Record provendo mapeamento objeto-relacional. Este mapeamento no momento está limitado ao acesso ao sistema gerenciador de banco de dados, SGDB, PostgreSQL mas pode ser expandido para utilizar outras ferramentas. A proposta de uso da ferramenta para persistir dados é afastar o desenvolvedor das complexidades do mecanismo de banco de dados e facilitar o desenvolvimento da aplicação e manutenção futura. O Módulo de desenvolvimento de aplicações utiliza este mesmo modelo para suas necessidades de persistência.

Resultados Esperados

O módulo de desenvolvimento de aplicações para o expresso oferece um ambiente simples para o desenvolvimento de novas aplicações promovendo agilidade na criação de aplicativos que necessitem integração com o ambiente Expresso. A padronização nas ferramentas de desenvolvimento resulta em menor tempo de aprendizagem no uso do módulo possibilitando que o este possa ser uma alternativa viável para substituir processos que são mantidos com o uso de planilhas e outros artifícios.

A possibilidade de acesso aos sistemas como provedores de serviços oferece grande reaproveitamento de funcionalidades implementadas podendo ser acessados por sistemas externos desenvolvidos nas mais diversas linguagens. Uma consequência desta foma de fornecimento de resultados é o desacoplamento da camada de visualização das funcionalidades do negócio o que oferece possibilidade de troca de tecnologias com pouco impacto.

O fornecimento de uma aplicação para criação de interfaces gráficas, aliada as ferramentas de geração automática de código, permitem a programadores com pouco conhecimento ou experiência em desenvolvimento de software criarem sistemas robustos e de fácil utilização pelo usuário. Estas ferramentas oferecem ao ambiente Expresso a possibilidade de migração de aplicações legado da corporação com pouco desgaste.

A criação de novas bibliotecas pode ser feito sem nenhuma alteração na estrutura no núcleo da aplicação ou nos sistemas em produção. As bibliotecas oferecem flexibilidade para incorporar funcionalidades específicas da organização, como por exemplo acesso a mainframe, com grande facilidade.