Классы абстракции доступа к базе данных - PullRequest
2 голосов
/ 04 августа 2010

В настоящее время у меня есть класс доступа к базе данных с именем 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 Ответ

1 голос
/ 04 августа 2010

Нет, на самом деле это звучит довольно хорошо.Похоже, у вас есть надежный уровень абстракции между бизнес-логикой и доступом к данным (это называется Шаблон сопоставления данных ).

Единственная проблема, связанная с таким ростом, состоит в том, что вы можете получитьметоды, которые пересекаются.Вам также следует постараться поддерживать стандартное соглашение об именах для обоих классов.

В изображениях используется метод Images :: insertNew, а в галереях - Galleries: createNew.

У вас есть модели?Потому что похоже, что у вас много запросов для сборки отдельных значений, но не целых объектов.

...