Классы абстракции доступа к базе данных
В настоящее время у меня есть класс доступа к базе данных DB
, который использует PDO
, Затем у меня есть несколько подклассов для доступа к каждой таблице:
Users
Images
Galleries
Text
Videos
Это было приятно, когда я впервые начал свой проект, но теперь я не уверен, насколько он хорош, поскольку у меня есть метод для каждого запроса к базе данных, который я использую в каждом из этих классов. Например:
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)
Ну, вы поняли. Я добавляю эти методы по мере необходимости, и в процессе разработки я начинаю с использования DB
учебный класс:
//Execute a query
DB::query($query);
//Get a single row
$row = DB::getSingleRow($query);
//Get multiple rows
$rows = DB::getMultipleRows($query);
Итак, я тестирую запросы с моим классом БД, затем, когда они работают, я оборачиваю их в метод класса, который связан с ним (класс Image для таблицы изображений, класс Galleries для таблицы galleries и т. Д.).
Я чувствую, что это будет расти и расти, так как позже я добавлю новые функции (что может быть хорошо, но я не уверен). Кто-нибудь может критиковать мой метод и / или предлагать альтернативные решения?
Спасибо!
1 ответ
Нет, на самом деле это звучит довольно хорошо. Похоже, у вас есть надежный уровень абстракции между бизнес-логикой и доступом к данным (это называется шаблоном Data Mapper).
Единственная проблема с этим становится большим, что вы можете в конечном итоге с методами, которые пересекаются. Вам также следует попытаться поддерживать стандартное соглашение об именах для обоих классов.
В изображениях используется метод Images::insertNew, а в галереях - Galleries: createNew.
У вас есть модели? Потому что похоже, что у вас много запросов для сборки отдельных значений, но не целых объектов.