Criando uma classe de driver de banco de dados universal

5

Eu tenho um framework MVC homebrew que eu tenho usado há algum tempo, e ele tem funcionado muito bem, mas estou planejando um upgrade para ele para suas classes ORM. Até agora, ele suporta apenas bancos de dados SQL criando instruções dependentes de qual função está sendo chamada. A classe ORM inclui estrutura e validação de campo, campos computados, índices e classes unidas (para associações, 1-1 , 1-* , *-1 e *-* ) e fornece funcionalidade suficiente para selecionar dados e buscar linhas associadas no banco de dados.

Mas eu gostaria de estendê-lo para suportar bancos de dados XML, LDAP e NoSQL (ou seja, MongoDB). Minhas idéias para implementar isso seriam modificar as funções dentro da classe ORM para interagir com um driver personalizado (para cada tipo de banco de dados) em um formato comum. Infelizmente, eu não tive experiência suficiente com o uso desses outros formatos o suficiente para projetar adequadamente uma classe de interface que pudesse ser usada pelo ORM para qualquer tipo.

Então, existem drivers de banco de dados universais que suportam todos esses tipos de banco de dados para que eu possa aprender pelo exemplo?

A interface atual que estou trabalhando é:

interface DBDriver {
  function connect($host, $un, $pw, $persist = false);
  function disconnect();
  function selectDB($db);
  function charset($charset);
  function insert($table, $values);
  function select($table, $fields, $joins, $where, $group, $having, $order, $limit);
  function update($table, $where, $values, $where, $order, $limit);
  function delete($table, $where, $order, $limit);
  function transactionBegin();
  function transactionCommit();
  function transactionRollback();
}

Mas estou preocupado que, embora isso forneça o suficiente para criar instruções SQL, talvez não seja suficiente ou talvez até exagero para outros métodos, como XML ou NoSQL.

    
por topherg 23.04.2013 / 16:48
fonte

1 resposta

4

Seria tão abstrato que não faria nada de útil (paralisia de análise / inação de abstração). A melhor coisa a fazer seria definir interfaces para o CRUD / BREAD / etc e implementá-las conforme forem necessárias. Se você estiver usando o PHP 5.4, você pode tirar proveito de características para que você possa preparar drivers fragmentados para o comportamento compartilhado.

interface Create { }
interface Read { }
interface Update { }
interface Delete { }
interface Browse { }
interface Edit { }
interface Add { }
interface CRUD extends Create, Read, Update, Delete { }
interface BREAD extends Browse, Read, Edit, Add, Delete { }
interface Transactional { }
    
por 22.05.2013 / 00:27
fonte