1

私のmongoDBクラスとmysqlクラスを使用するために1つの抽象化クラスを持つことは可能ですか?mysqlでは、1つの関数で挿入、更新、および削除ステートメントを実行できますが、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);
}
4

1 に答える 1

1

あなたは適切な抽象化レベルで考えていません。挿入、更新、および削除操作(コードサンプルが実行している操作)を抽象化するのではなく、ドメインを抽象化することを検討する必要があります。これにより、オブジェクトを挿入、更新、および削除できるインターフェイスを思い付くことができます。次に例を示します。

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

これで、両方ともIDatabaseCollectionを実装するSQLDatabaseCollectionとMongoDatabaseCollectionを実装できます。

上記は基本的な例であり、もちろん他にも多くの方法があります。しかし、それは抽象化を扱うときに考え始める必要がある方向です。

要するに、あなたの抽象化は低レベルであり、それをより高いレベルの抽象化にするためにそれを上げる必要があります。

于 2012-09-17T16:58:23.267 に答える