数据库访问抽象类

时间:2010-08-04 15:59:57

标签: php database model database-abstraction

目前,我有一个名为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);

所以,我用我的DB类测试查询,然后当它们工作时,我将它们包装在与它相关的类的方法中(图像表的Image类,画廊表的Galleries类等)。

我觉得随着我以后添加新功能,这将继续增长和增长(这可能没问题,但我不确定)。任何人都可以批评我的方法和/或提供替代解决方案吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

不,这实际上听起来不错。您似乎在业务逻辑和数据访问之间有一个可靠的抽象层(这称为Data Mapper pattern)。

这个变大的唯一问题是,你最终可能会遇到重叠的方法。您还应该尝试在两个类中保持标准的命名约定。

在图像中,方法是Images :: insertNew,在图库中,它是Galleries:createNew。

你真的有模特吗?因为它看起来像是有很多查询来组合单个值,而不是整个对象。