= Documento de Arquitetura do Novo Expresso = [[PageOutline(1-3, Conteúdo)]] = 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 [[BR]] === 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. [[BR]] 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.[[BR]] 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. [[BR]] 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. [[BR]] 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. [[BR]] 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. [[BR]] 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. [[BR]] 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. [[BR]] 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. [[BR]] 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 : [[BR]] Camada de modelo está dentro da pasta !Tinebase/Model. [[BR]] Camada de controle está dentro da pasta !Tinebase/Controller. [[BR]] Camada de visão está dentro da pasta Tinebase/views. [[BR]] 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. [[Image(camada1.jpg,,center)]] = 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:[[BR]] [[Image(layout.jpg,,center)]] ==== 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.[[BR]] O Novo Expresso suporta conceder privilégios:[[BR]]      * 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 [[Image(Egwbase_Record_Container.png,,center)]] ===== 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 [[Image(container.png,,center)]] = 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.[[BR]] Toda comunicação se dará por protocolos padrões, XML/RPC ou SyncML para conexão a clientes de e-mail.[[BR]] '''JAMAIS SERÁ GERADO CÓDIGO HTML NA CAMADA DE NEGÓCIOS''' [[Image(soa.jpg,,center)]] ==== 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:[[BR]] [[Image(servicos.jpg,,center)]] A camada que trata dos backends será flexível suficiente para prover a troca de serviços, de modo configuráveis:[[BR]] ==== 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 ==== [[Image(postgresql.png,,center)]] ==== 8.2.Disponibilidade e replicação do IMAP ==== [[Image(imap.png,,center)]] ==== 8.3.Disponibilidade e replicação do LDAP ==== [[Image(ldap.png,,center)]] ==== 8.4.Disponibilidade e replicação do SMTP ==== [[Image(smtp.png,,center)]] = 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.