【问题标题】:Database access abstraction classes数据库访问抽象类
【发布时间】:2010-08-04 15:59:56
【问题描述】:

目前,我有一个名为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 类测试查询,然后当它们工作时,我将它们包装在与之相关的类的方法中(图像表的图像类,画廊表的画廊类等)。

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

谢谢!

【问题讨论】:

    标签: php database model database-abstraction


    【解决方案1】:

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

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

    在 Images 中,方法是 Images::insertNew,在 Galleries 中是 Galleries:createNew。

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

    【讨论】:

    • 我只是使用这些抽象类检索的查询结果。在我写这篇文章的时候,我意识到我在我的非 PHP 项目中使用了模型......我可能应该在这个 PHP 项目中创建它们,这就是你的意思吗?
    • 实际上这将是摆脱大多数查询的一种方法,因为您可以使用一些标准方法(插入、删除、更新、findAll、findById、find(使用过滤器选项))来检索您的模型包含您想要拥有的所有数据。如果您想真正准确地了解您想要拥有哪些数据(没有 SELECT * FROM),您可以另外指定哪些列或创建自定义函数。
    • 我明白了。所以,我可以继续我当前的设置(没有模型的数据抽象层),只注意我用于方法的命名约定,或者我可以构建一些模型类并取消抽象层?跨度>
    • 不,不要把抽象层抛到脑后。但生活会轻松很多。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-12
    • 2021-05-09
    • 2019-05-29
    • 2019-07-09
    • 2012-12-01
    • 1970-01-01
    • 2011-02-19
    相关资源
    最近更新 更多