php - 包装 mongoDB 和 mysql

标签 php mysql mongodb architecture uml

是否可以使用一个抽象类来使用我的 mongoDB 类和 mysql 类。因为,在 mysql 中我们可以在一个函数中执行插入、更新和删除语句,但我们不能在 mongodb 中执行。

或者他们应该有单独的数据库抽象层

 // I can pass INSERT,UPDATE and DELETE query to this function but for monbodb I cannot 
mysql 
public function doNonQuery($sql){
        mysql_query($sql);
}

mongoDB
public function insert($tableName,$query){
    $collection = new MongoCollection($db,$tableName);
    $a  = $query
    $collection->insert($a);
}

public function update($tableName,$query){
    $collection = new MongoCollection($db,$tableName);
    $a  = $query
    $collection->update($a);
}

最佳答案

您没有在正确的抽象层次上思考。与其尝试抽象插入、更新和删除操作(这是您的代码示例所做的),不如考虑抽象您的域。这会让你想出一个界面,你可以在其中插入、更新和删除对象。例如:

interface IDatabaseCollection<T> where T : IDatabaseEntity
{
    void Insert(T item);
    void Update(T item);
    void Delete(T item);
}

现在您可以实现 SQLDatabaseCollection 和 MongoDatabaseCollection,它们都实现了 IDatabaseCollection。

上面是一个基本的例子,当然还有很多其他的方法可以实现。但这是您在处理抽象时需要开始思考的方向。

简而言之,您的抽象级别太低,您需要提升它以使其成为更高级别的抽象。

关于php - 包装 mongoDB 和 mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12454991/

相关文章:

php - 如何从 Javascript 执行外部 php?

php - 如何在 PHP 中使用 MySQL 获取单个单元格?

php - 使用 AJAX(无刷新)更新部分动态表单 - 无法正常工作

c# - 在不使用子文档中的鉴别器的情况下将 C# 类序列化到 MongoDB

c# - 尽管没有进行算术运算,但 IMongoCollection<T>.UpdateOneAsync 中出现 OverflowException

php生成word文档更改页面

php - PHP 中的 imagecolortransparent 不起作用

mysql - DOUBLE 作为 BLOB 返回

python - 大量调用 SQLAlchemy 的 InstanceState 类的 expire 方法

mongodb - mongodb 在两个集合之间加入