Database Abstraction

De Wiki Expresso V3
Ir para: navegação, pesquisa

O Expresso 3 trabalha com Zend\Db para abstração de sua camada de banco de dados. Zend\Db\Adapter implementa o padrão de projeto Factory Method, que desacopla o banco de dados da aplicação. Dessa forma, com uma mesma interface, é possível utilizar diferentes bancos de dados. Zend\Db\Adapter estende a camada de abstração PDO (PHP Data Objects). Com isso fica mais fácil migrar de um banco de dados para outro, ou até utilizar mais de um banco de dados, de fornecedores diferentes, em uma mesma aplicação.

PDO possui implementações para diversos bancos de dados, como Firebird, Informix, Sql Server, MySQL, Oracle, PostgreSQL e SQLite. Além disso, possui uma implementação para comunicação com bancos que possuem drivers de acesso no padrão ODBC.

O Expresso 3 possui backends implementados para os bancos de dados Oracle, MySQL e PostgreSQL. Mas você pode implementar backend para outro banco de dados utilizando a camada de abstração do Expresso 3.

Implementando um novo backend de banco de dados no Expresso 3

Setup

Para que o Expresso 3 crie as tabelas no banco de dados com o qual você deseja trabalhar, você precisa adicionar uma implementação de backend no módulo Setup.

Dentro do diretório Setup existe um subdiretório Backend. Nesse diretório você deve criar uma classe PHP para implementar o acesso a um novo SGBD.

Supondo que o SGBD se chame Acme, criaríamos a classe Acme no arquivo Acme.php. O nome completo da classe, seguindo o padrão do Zend Framework 1 seria Setup_Backend_Acme. Essa classe deve estender Setup_Backend_Abstract e implementar seus métodos abstratos com o dialeto SQL e tipos de dados específicos do novo SGBD. Essa classe contém a implementação para criação e alteração de tabelas.

Dentro do subdiretório Schema, você encontrará os seguintes subdiretórios:

  • Field
  • Index
  • Table

Que contém, respectivamente, as abstrações e implementações de campo, índice e tabela, que são usadas pelas herdeiras de Setup_Backend_Abstract. Seguinte o exemplo acima, nós teríamos de criar as classes:

  • Setup_Backend_Schema_Field_Acme que estende de Setup_Backend_Schema_Field_Abstract
  • Setup_Backend_Schema_Index_Acme que estende de Setup_Backend_Schema_Index_Abstract
  • Setup_Backend_Schema_Table_Acme que estende de Setup_Backend_Schema_Table_Abstract


Se o nome da classe backend não casar com o nome da classe correspondente no Zend Framework 1, ou não existir uma classe no Zend Framework 1, você possivelmente terá de alterar o método factory() de Setup_Backend_Factory.

Para que o usuário instalador possa selecionar o novo backend, é preciso incluir uma opção correspondente na interface Javascript. Inclua um novo elemento na propriedade store da instância de Ext.form.ComboBox atribuída à propriedade sqlBackendCombo da classe Tine.Setup.ConfigManagerPanel. Esta classe fica no diretório js do módulo Setup.

Tinebase

Para habilitar o uso de um novo SGBD, você deve alterar o método setupDatabaseConnection() de Tinebase_Core.

Ferramentas pessoais
Espaços nominais

Variantes
Ações
Navegação
Ferramentas