Classes de abstração de acesso ao banco de dados
-
25-09-2019 - |
Pergunta
Atualmente, tenho uma classe de acesso ao banco de dados nomeada DB
, que usa PDO
. Eu tenho então um punhado de subclasses para acessar cada tabela:
Users
Images
Galleries
Text
Videos
Isso foi bom quando iniciei meu projeto, mas agora não tenho certeza se é tão bom, pois tenho um método para cada consulta de banco de dados que uso em cada uma dessas classes. Por exemplo:
Images::insertNew($filename)
Images::getTotalInGallery($galleryId)
Images::getAllInGallery($galleryId, $fetchStyle)
Images::updateDescription($imageId, $description)
Images::updateGallery($imageId, $galleryId, $orderNum)
Images::getSingle($imageId)
Images::getFilename($imageId)
Images::getImageIdByFilename($filename)
Galleries::getNameById($galleryId)
Galleries::getAll()
Galleries::getMaxImages($galleryId)
Galleries::checkIfExists($galleryId)
Galleries::createNew($galleryName)
Galleries::getById($galleryId)
Galleries::delete($galleryId)
Bem, você entendeu a ideia. Eu tenho adicionado esses métodos à medida que a necessidade deles surge e, no desenvolvimento, começo apenas usando o DB
classe:
//Execute a query
DB::query($query);
//Get a single row
$row = DB::getSingleRow($query);
//Get multiple rows
$rows = DB::getMultipleRows($query);
Então, eu testo consultas com minha classe de banco de dados e, quando elas estão trabalhando, envolvo -as em um método da classe relacionada a ela (classe de imagem para imagens tabela, classe de galerias para galerias, etc.).
Sinto que isso continuará crescendo e crescendo à medida que adiciono novos recursos mais tarde (o que pode estar bem, mas não tenho certeza). Alguém pode criticar meu método e/ou fornecer soluções alternativas?
Obrigado!
Solução
Não, isso realmente parece muito bom. Você parece ter uma camada de abstração sólida entre a lógica de negócios e o acesso a dados (isso é chamado Padrão de mapeador de dados).
O único problema com isso ficando grande é que você pode acabar com métodos que se sobrepõem. Você também deve tentar manter uma convidação de nomeação padrão em ambas as classes.
Em imagens, o método é imagens :: insertnew e em galerias são galerias: createnew.
Você realmente tem modelos? Porque o que parece é que você tem muitas consultas para montar valores únicos, mas não objetos inteiros.