wiki:NovoExpresso/ear

Version 32 (modified by viani, 3 years ago) (diff)

--

Documento de Arquitetura do Novo Expresso

1. Objetivo

1.1. Proporcionar ao Expresso uma plataforma em que possa evoluir de modo a prover segurança, usabilidade, qualidade, desacoplamento de camadas MVC, principalmente relacionadas a negócio e visão, performance, reaproveitamento de componentes, mobilidade, orientação a serviços e suporte a estrutura de Nuvem.

1.2. Será adotado software TINE20, como base tecnologia para este NOVO EXPRESSO, agregando necessidades ou funcionalidades nesta

plataforma.

2. Elementos de software Significativos e Licenciamentos

ExtJS

ExtJS é um framework Javascript orientado a objetos. Ele permite o controle de eventos desacoplado das páginas HTML e possui vários componentes gráficos prontos para uso (widgets). Versão utilizada: 3.1.1 Licença: GPLv3 Site:  http://www.sencha.com/products/extjs

Zend

Zend Framework é um framework para desenvolvimento de aplicações PHP orientado a objetos e com arquitetura de baixo acoplamento. Pode ser usado para construir toda a estrutura de uma aplicação e governá-­la pelo padrão MVC ou compor uma aplicação a partir de um modelo 'self­service' de uso de classes. Zend Framework possui um modelo de desenvolvimento de componentes que permite o encapsulamento de classes de terceiros em uma interface padronizada e um estilo de codificação reconhecido pela ferramenta PHP_CodeSniffer. No caso do Tine 2.0, o Zend Framework não governa a aplicação, mas é utilizado por ela. O Tine 2.0 possui uma implementação própria de MVC que faz uso das classes do Zend Framework.

Versão utilizada: 1.9.1 Licença: New BSD Site:  http://framework.zend.com

Ajam

Ajam (Asynchronous Javascript Asterisk Manager), é tecnologia disponibilizada na versão 1.4 do servidor de comunicação por voz Asterisk, para permitir o uso de sua interface de gerenciamento por HTTP, via requisição assíncrona. O Tine 2.0 possui uma classe que serve de interface para um cliente Ajam remoto.

Versão utilizada: Asterisk 1.4 Licença: GPLv2 Site:  http://www.asterisk.org/asterisknow/developers/­guide

GeoExt

GeoExt é um framework Javascript para sistemas de informação geográfica. Ele faz uso de ExtJS e OpenLayers.

Versão utilizada: não informada Licença: BSD Site:  http://www.geoext.org

Hash

Classes para criptografia de senhas.

HTMLPurifier

HTMLPurifier é uma biblioteca de filtros escrita em PHP compatível com padrões HTML. Ela remove código malicioso enviado em tentativas de ataque XSS (Cross­Site Scripting), utilizando uma lista branca auditada. Ela também verifica se os documentos estão compatíveis com as especificações do W3C, tarefa possível somente com um grande conhecimento dos padrões.

Versão utilizada: 4.2.0 Licença: LGPL Site:  http://htmlpurifier.org

OpenDocument

Classes para criação de documentos ODT e ODS.

OpenLayers

Framework Javascript para mapeamento dinâmico (construção de mapas geográficos em tempo real) em páginas Web.

Versão utilizada: 2.8 Licença: Clear BSD Site:  http://openlayers.org

PHPExcel

Conjunto de classes PHP que permitem gravar e ler arquivos de diferentes formatos,como Excel 2007, PDF e HTML.

Versão utilizada: 1.7.5 Licença: GPL Site:  http://phpexcel.codeplex.com

qCal

qCal é um gerador e leitor de iCalendar para PHP 5. É baseado na especificação iCalendar 2.0(RFC 2445). iCalendar é um formato de arquivo que permite a usuários de Internet enviarem requisições de reunião e tarefas para outros usuários por e­mail ou compartilhamento de arquivos com extensão .ics.

Versão utilizada: Não informada Licença: LGPL Site:  http://code.google.com/p/qcal

SabreDAV

É um framework WebDAV para PHP. WebDAV (Web­based Distributed Authoring and Versioning) é definido pela especificação RFC 4918.

Versão utilizada: 1.3.0 Licença: Modified BSD Site:  http://code.google.com/p/sabredav

vcardphp

Classe para geração de cartões virtuais de visita.

Versão utilizada: Não informada. Licença: BSD Site:  http://vcardphp.sourceforge.net

Wbxml

WBXML (WAP Binary XML) é uma representação binária de XML que permite a transmissão de documentos em redes móveis.

3. Descrição da Arquitetura

3.1. Camadas e Subsistemas

A proposta de evolução está baseada em uma implementação MVC. Essa implementação tem fraco acoplamento com o Zend Framework, evitando heranças das classes do framework.

Descrição das camadas :

Camada de modelo está dentro da pasta Tinebase/Model.

Camada de controle está dentro da pasta Tinebase/Controller.

Camada de visão está dentro da pasta Tinebase/views.

A camada de visão é baseada em arquivos PHP que produzem conteúdo dinâmico em HTML e fazem uso intensivo de Javascript, por meio do framework ExtJS. A Figura abaixo demonstra uma visão geral, mostrando a multiplicidade de backends e frontends.

4. Padrão Arquitetural

4.1.Single Page Application (SPA).

Servido por meio de uma única URL, o arquivo index.php. O entendimento do fluxo da aplicação simplificado, uma vez que só há uma porta de entrada para as requisições. Pode-se dizer que esse modelo SPA implementa o padrão de projeto Front Controller, o que resolve problemas de organização e segurança.

4.2. ISO-13407(processo voltado para usuários) e RIA(rich internet application)

A navegação nos módulos do sistema será padronizada,baseada sempre no layout abaixo:

4.3. Direitos e Privilégios

4.3.1. Privilégios
  • Os privilégios no Novo Expresso são atribuidos via “grants”. Grant é o mecanismo para acesso a um conjunto de dados, denominado container. Um container pode ser um contato, um calendário ou tarefa, por exemplo. Qualquer tipo e conjunto de registro é vinculado a um container. Um container pode ser um addresbook pessoal ou compartilhado. Os grants são atribuídos ao container e não para os registros de dados.

O Novo Expresso suporta conceder privilégios:

  • Read (ler os registros de dados existentes de um container)
  • Add (adicionar novos registros de dados em um container)
  • Modificar (modificar os registros de dados existentes no container)
  • Delete (excluir registros de dados armazenados neste container)
  • Admin (gerenciar subsídios para o container)

Diagrama Entidade Container

4.3.2. Direitos – Rights
  • Controla os direitos de quais partes do Novo Expresso serão usadas pelo usuário. Os direitos permitem que o administrador controle, qual o usuário pode executar qual a aplicação e quais as partes (parte de administração, por exemplo) desta aplicação o usuário pode usar.

Suporta os seguintes direitos:

  • Run (executar este aplicativo)
  • Admin (administrar esta aplicação)

4.3. Registros e RecordSet

NO php5, é possível escrever código com o paradigma de Programação Orientado Objeto. Uma das conseqüências ao escrever o código com o paradigma OOP é, que o transporte de dados não é um array.

No NovoExpresso usamos objetos como transporte de dados. Chamamos a entidade de dados de registro e chamamos a coleta de muitos registros de RecordSet. Exemplificando, uma única conta, evento, contatoou e-mail, por exemplo, é um registro enquanto que um grupo de contas, uma lista de calendário completo ou uma caixa de entrada é um RecordSet.

  • Tinebase_Record_Abstract

Para simplificar o desenvolvimento, há uma implementação abstrata do Tinebase_Record_Interface chamado Tinebase_Record_Abstract no pacote Tinebase que deve cobrir as necessidades da maioria das aplicações. As intenções desta classe é para disponibilizar o registro com métodos necessários para filtrar e validar entrada do usuário.

  • Tinebase_Record_RecordSet

O RecordSet é o mapeamento de dados para conjuntos de dados. É importante perceber a sua tarefa como sendo apenas um veículo para não ter nada para com questões agrupamento, ou AccessControl. A relação entre os registros é tratada por ACL Egwbase_Record_Container.

  • Diagrama de classes Record e RecordSet

5. Topologia

As camadas entre aplicação, backends e visualizações estão bem separadas. A orientação a serviços e utilização do JSON como interface desta prestação de serviços possibilitará a oferta de serviços a diferentes clientes em plataformas diferentes, desde que suportem o protocolo JSON.

Toda comunicação se dará por protocolos padrões, XML/RPC ou SyncML para conexão a clientes de e-mail.

JAMAIS SERÁ GERADO CÓDIGO HTML NA CAMADA DE NEGÓCIOS

5.1.JSON/RPC para comunicação com outras aplicações, independente de plataforma.

5.2.SyncML/OMA – Para dispositivos móveis.

6. Topologia da Infraestrutura

O novo expresso interagirá com os seguintes componentes/serviços providos pela infraestrutura que suporta a aplicação:

A camada que trata dos backends será flexível suficiente para prover a troca de serviços, de modo configuráveis:

Serviços LDAP

Poderão acoplar-se qualquer serviço que tenha suporte ao padrão LDAP, desde OpenLdap, RHDS,Novell ou Ad(Windows).

Banco de dados

Deverá suportar Mysql(default), podendo usar Postgresql ou mesmo Oracle.

Imap

Suporte a Cyrus , Dovecot ou similar.

SMTP

Suporte a Postfix ou similar.

7. Arquitetura disponível em Nuvem

Requisitos em fase de definição:

  • Os front-ends do Expresso permitirão acesso remoto, quantos necessário para crescimento horizontal,

com balanceamento de carga conforme a demanda de requisições.

  • Os serviços serão passíveis de virtualização;
  • Existirão customizações por domínio:

Tema do domínio; Quota de disco por domínio; Quantidade de usuários do domínio; Banco de dados acossiado ao domínio;

8. Arquitetura com alta disponibilidade

8.1.Disponibilidade e replicação do banco de dados

8.2.Disponibilidade e replicação do IMAP

8.3.Disponibilidade e replicação do LDAP

8.4.Disponibilidade e replicação do SMTP

9. Pontos a Exaltar

Um passo estratégico, considerando os problemas atuais e perspectivas futuras, orientação a serviços, ambiente de nuvem, visibilidade, usabilidade e segurança. Foco na qualidade do produto e segurança, com consequente satisfação dos clientes e usuários.

Attachments