sexta-feira, 27 de fevereiro de 2009

Doctrine (ORM para PHP)

O Doctrine é uma ferramenta de mapeamento objeto-relacional para PHP sob a licença GNU Lesser General Public License. Suas principais influências foram o Hibernate do Java e a biblioteca ActiveRecord do Ruby on Rails. Após muitos testes foi a escolhida para compor o SeptoFramework.

O Doctrine segue o padrão de projeto Active Record para fazer a abstração entre as tabelas do banco de dados e as entidades da aplicação sendo que, cada tabela corresponde a uma classe. Todas as entidades devem estender a classe Doctrine_Record criando assim um invólucro que lhe adiciona comportamento. Esta abordagem é uma limitação reconhecida pelos próprios desenvolvedores do Doctrine. No SeptoFramework foi feito um encapsulamento para minimizar esta limitação. Apesar de todas as entidades estenderem Doctrine_Record não é permitido que a entidade manipule a si mesma, fazendo uma analogia aos POJOs do Java.

Para facilitar a criação de consultas foi desenvolvida a DQL (Doctrine Query Language) inspirada na HQL do Hibernate. Com a DQL é possível fazer consultas em OO (orientação a objetos). Também existe a possibilidade de fazer as consultas com SQL nativo.

O PHP 5.2.3 ou superior é requisito obrigatório para o seu funcionamento. Não há a necessidade de bibliotecas externas, ele utiliza apenas o PDO que está embutido no release oficial do PHP 5.2.3+.

sexta-feira, 20 de fevereiro de 2009

ORM (Mapeamento objeto-relacional)

É frequente arquitetos de software optarem pelo desenvolvimento de aplicações utilizando o paradigma da Orientação a objetos e um Banco de dados relacional como a principal fonte de dados.

Para a aplicação é vantajoso usufruir dos recursos da orientação a objetos, pois permite que seja criado tipos específicos para a aplicação. Não há a necissidade de fazer analogias para representar um objeto do mundo real nas estruturas de dados disponíveis na linguagem de programação. Com esta forma de programar evita-se reescrita de código e erros entre outras inúmeras vantagens. É um modelo maduro e confiável.

Os bancos de dados são construídos seguindo o Modelo Relacional desde a década de 70 nos mainframes. Este modelo possui fundamentos matemáticos consistêntes baseados na teoria dos conjuntos. As estruturas dos bancos de dados relacionais foram criadas para facilitar o acesso aos dados.

Surge então o problema. Como reduzir a complexidade da união dos dois mundos? A solução foi desenvolver um tradutor que fizesse um mapeamento entre a programação orientada a objetos para o modelo relacional. Na prática este mapeamento consiste em representar as tabelas do banco de dados em classes, não necessariamente tem-se uma classe para cada tabela. Este mapeamento pode ser descrito de diversas formas de acordo com a ferramenta utilizada.

O Hibernate foi o precursor no conceito de ORM, escrito na linguagem Java, desenvolvido por uma equipe altamente qualificada. Outras ferramentas como o Doctrine (utilizado no SeptoFramework) foram construídas basedas no popular Hibernate.

Conhecendo os SeptoModules

O que é?
Os SeptoModules são módulos desenvolvidos pelo Septograma que utilizam o SeptoFramework para controlar toda a aplicação. Sua função é resolver os problemas mais comuns dos desenvolvedores de sistemas web tornando mais eficiente o processo produtivo. Eles dão suporte, por exemplo, ao controle de acesso, crud básico de entidades e auxiliam também na configuração e ciclo de desenvolvimento de outros módulos.

Como se instala?
A instalação de um SeptoModule é bastante simples. Eles funcionam independentes uns dos outros e tudo que o desenvolvedor precisa fazer para instalar é arrastar o módulo contendo o SeptoModule desejado para dentro do diretório modules. O próprio SeptoModule irá tratar de reconhecer seu ambiente de instalação e recolher informações sobre outros módulos instalados nesta mesma pasta.

Que SeptoModules existem e o que eles fazem?

SeptoPanel – É um painel de administração montado dinamicamente onde é possível criar, listar, alterar e excluir entidades. Os desenvolvedores podem optar em utilizar este módulo sem ter que fazer nenhuma configuração especial ou podem personalizá-lo mudando sua aparência e a navegação para fazer dele o Painel de Administração exclusivo de seus clientes.



SeptoCyclo – O SeptoFramework possui três camadas por onde as informações trafegam para realizar negócios e dar respostas às solicitações do cliente (navegador). Quando uma entidade é criada, algo precisa passar a existir em cada uma dessas camadas para que seja possível manipular a entidade. É possível criar tudo isso programando, mas o SeptoCyclo é capaz de dar uma ajuda gerando dinamicamente os arquivos necessários para a camada de apresentação, negócio e integração.


SeptoAccess – Este recurso têm a função de auxiliar na definição das regras de acesso. Com ele, é possível definir dinamicamente a interação entre Roles e Resources de uma maneira intuitiva e organizada.

domingo, 15 de fevereiro de 2009

Apresentando o SeptoFramework

PHP é uma linguagem de script orientada a objetos simples e poderosa que tem o poder de atrair tanto desenvolvedores iniciantes quanto desenvolvedores experientes. Construir aplicações com o paradigma OO permite que você crie um código com uma divisão mais lógica, mais fácil de manter e possível de reaproveitar.

Com o lançamento do PHP5, o suporte que esta linguagem oferece à programação OO ficou mais completo e vários frameworks sugiram para facilitar a resolução dos problemas mais comuns dos desenvolvedores web, como: controle de acesso, layout das páginas, acesso ao banco de dados e etc.

O Zend Framework e o Doctrine são dois exemplos. O Zend Framework é bastante completo e permite que aplicações sejam desenvolvidas implementando um padrão de projeto conhecido como MVC. O MVC contribui para tornar o código orientado a objetos ainda mais organizado separando aquilo que é lógica do negócio da apresentação e centralizando as solicitações dos clientes nos controllers.

O Zend Framework é muito legal. Mas existe algo fundamental que ele não possui: uma ferramenta de ORM. ORM significa Mapeamento Objeto-Relacional e uma ferramenta de ORM é importante quando se desenvolve aplicações OO porque, no final das contas, alguns dos objetos criados precisam ser gravados e recuperados de uma base de dados que, na maioria das vezes, utiliza o MER - Modelo Entidade-Relacionamento -, algo diferente do paradigma OO.

O paradigma OO funciona muito bem para a lógica do negócio, mas quando o assunto é banco de dados, o modelo mais interessante continua sendo o bom, velho e consagrado MER. Por isso, o mais inteligente a fazer quando se desenvolve aplicações complexas é usar tanto o paradigma OO quanto o MER. Ou seja, ambos precisam trabalhar juntos para construir uma aplicação que usa o melhor dos dois mundos.

Isso significa que em algum momento dentro da arquitetura da sua aplicação alguém deve fazer esta integração entre o paradigma OO e o MER. E acredite: fazer esta integração é uma tarefa complexa, chata, cansativa e desnecessária! Sim! Desnecessária! Isso porque alguém já fez esse trabalho para você construindo a tal ferramenta ORM.

A ferramenta ORM é responsável por unir os dois paradigmas, OO e ER. No mundo JAVA, existe uma ferramenta ORM muito popular conhecida como Hibernate. No mundo PHP, depois de muito pesquisar, escolhemos o Doctrine como ferramenta de ORM.

Ou seja, PHP possui aquilo que é necessário para desenvolver aplicações complexas sem ter que sair reinventando a roda. Agora, é só juntar tudo isso para facilitar a construção de aplicações complexas! Mas só?

Na verdade, essa tarefa não é assim tão fácil. Mesmo depois de dominar ambos os frameworks (ZendFramework e Doctrine) muito deverá ser feito até você poder dizer, no final das contas, que tem uma Arquitetura que integra ambas as ferramentas e dá suporte para construção de sites complexos.

Ou seja, embora as ferramentas existam para download, ainda há um grande degrau que dificulta a sua utilização. E esse degrau é o degrau da integração e especialização dessas ferramentas com o objetivo de construir TODA uma ARQUITETURA que dê suporte ao DESENVOLVIMENTO de sites COMPLEXOS utilizando PHP.

É aí que entra o SeptoFramework. O SeptoFramework além de integrar o ZendFramework com o Doctrine é também a materialização de toda uma Arquitetura e um Processo Produtivo, pois também propõe um ciclo de desenvolvimento que pode ser especializado de acordo com a necessidade da sua organização.

Com o SeptoFramework, seu time se beneficia com as vantagens da utilização do MVC e do ORM através do Zend Framework e do Doctrine evitando que você seja obrigado a desenvolver frameworks internos para resolver os problemas mais comuns.

O SeptoFramework também foi desenvolvido pensando em permitir um gerenciamento de projeto mais afiado. Ele utiliza uma arquitetura de três camadas: uma responsável pela apresentação, outra pela lógica e a última pelos dados.

Com uma arquitetura assim, é possível que times diferentes desenvolvam e mantenham partes específicas da aplicação, permitindo uma divisão de esforços mais racional e impedindo que o upgrade ou substituição de uma camada exija alterações em todo o sistema.

quinta-feira, 12 de fevereiro de 2009

Um pouco mais sobre as 3 camadas do SeptoFramework


A camada de apresentação na prática está repleta de controles que sabem redirecionar para as ações certas de acordo com a requisição feita ao servidor.

Já a camada de negócio é subdividida em entidades e serviços. As entidades são os tipos da aplicação, onde está a lógica do negócio, estruturalmente fazem uma analogia aos POJOs do Java. Nos serviços é quando as ações de fato são executadas. Eles sabem como pedir para a camada de integração uma coleção de entidades, por exemplo, ou ainda salvar na sequencia correta varias entidades.

Para completar está faltando a camada de integração. Esta faz a integração entre a camada de negócio e a fonte de dados. Normalmente o banco de dados é a fonte utilizada, mas nem sempre. Os dados podem ser providos por um Web Service ou arquivo texto por exemplo. Interfaces são assinadas pelos DAOs tornando esta prática possível.

As camadas do SeptoFramework foram estruturadas desta forma com o seguinte intuito:
  1. Agrupar elementos semelhantes para facilitar a alteração de código (Coesão).
  2. Torná-las o mais independente possível (Acoplamento).
  3. Minimizar a duplicação de código.

sábado, 7 de fevereiro de 2009

Arquitetura Geral do SeptoFramework (as 3 camadas)

O SeptoFramework possui três partes ou camadas. São elas: Apresentação, Negócio e Integração. O Zend Framework não obriga a divisão do sistema dessa forma. As três camadas são específicas do SeptoFramework e são inspiradas no Modelo II de desenvolvimento da Sun Microsystems.

A Camada de Apresentação dá suporte para o Front-end das aplicações. No Back-end estão as camadas de Negócio e Integração, conforme mostra a figura ao lado.

Esta divisão proporciona inúmeras vantagens como, por exemplo, a possibilidade de ter pessoas ou times separados realizando trabalhos em paralelo, cada um responsável por alguma parte específica da aplicação.

Outra vantagem é o fraco acoplamento entre as partes, uma vez que cada uma implementa sua respectiva interface. Assim, a realização de alterações em uma parte específica da aplicação não implica necessariamente o redesenho de outras partes.

Tem-se ainda, como vantagem de utilizar uma arquitetura estruturada desta forma, clareza naquilo que são as regras do negócio e onde elas devem estar materializadas em forma de código dentro das aplicações. Isso facilita tanto a manutenção da interface, que é parte da Camada de Apresentação, quanto na fonte de dados, Camada de Integração.

Cada uma dessas três camadas serão abordadas com detalhes em posts futuros.

sexta-feira, 6 de fevereiro de 2009

A Filosofia do SeptoFramework

É comum para os estudantes de sistemas de informação observar o descompasso entre teoria e prática relacionados ao desenvolvimento de software. De um lado, existe a academia onde aprendemos programação orientada a objetos, engenharia de software, análise e projeto de sistemas, gerência de projetos e etc; do outro lado, também conhecido como o mundo real, um número incontável de projetos estourando prazos e orçamentos, gerando clientes insatisfeitos e desenvolvedores frustrados.

Mesmo parecendo difícil este casamento, aliar teoria e prática não é uma tarefa impossível. Estudo e aquisição de experiência somado a muita paciência e trabalho persistente tem sido uma fórmula que vem funcionando para o Septograma. Devido a isso, hoje estamos muito próximos de concluir um projeto que já existe há mais de 1 ano.

Este é um projeto que evoluiu e transformou-se muito durante todo esse tempo mas que, no final das contas, manteve sua proposta inicial (ou aquilo que forçosamente chamo de filosofia): facilitar e dar suporte ao ciclo de desenvolvimento de software orientado a objetos para web através da construção de uma arquitetura simples e robusta que busca aproveitar o que existe de melhor em termos de tecnologias disponíveis no momento e que seja capaz de aproximar teoria e prática no sentido de promover a maturidade e eficiência de times de desenvolvimento que utilizam PHP como linguagem.