c++ - 开始用 C++ 开发数据库接口(interface)的最佳点是什么?

标签 c++ interface relational-database

<分区>

我目前正在开发一些基于服务器/客户端的应用程序。 该应用程序是多线程的,具有插件支持(通过 dlopen,...)并且应该与多个数据库一起工作。

现在我正在寻找一些开始设计 DBI-ABC 的提示。首先,我想到了一个像这样的简单界面:

typedef struct {
    unsigned int userid;
    std::string  username;
    std::string  fullname;
    unsigned int usermodes;
} user_row_t;

class AbstractDBI
{
public:
    virtual ~AbstractDBI() {};

    virtual bool getUserData(int userid,user_row_t &row) const = 0;
    virtual bool setUserData(user_row_t &row) const = 0;
    // ...
}

这种设计足以处理应用程序核心使用的所有语句。但是如果我们需要在用户编写的插件中访问数据库,我们将不得不接触 DBI 类。

由于应用程序将承受沉重的负载,准备好的语句是必不可少的。我们还想使用数据库特定的数据类型,例如用于 postgres 的 inet

有没有人做过这样的事情,可以给我一些建议吗?

最佳答案

我自己从来没有设计过这样的东西,但我以前见过的一个例子是一个设置,其中数据库记录存储在一个结构中,该结构本质上是一个 std::map<std::string, boost::any> ,只有类型描述了自己,所以你知道它们是什么,不像 boost::any .然后可以针对数据库运行 SQL 查询,您将获得这些通用结构之一以及您请求的字段。

如果您将这些东西放入基类中,那么您可以派生出处理数据库特定细节的具体类 - 这应该允许您随时交换数据库,并为您的插件提供充分的灵 active 。

不过,如果您不想让插件完全自由,我想您可以授予他们对受限用户的访问权限。

关于c++ - 开始用 C++ 开发数据库接口(interface)的最佳点是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6484575/

相关文章:

c# - 需要一个在 C++、Java 和 .Net 应用程序之间共享的缓存

c++ - 在整个应用程序中重用接口(interface)

database - theta join、equijoin 和 natural join 之间的区别

c++ - 使用 gzwrite (zlib) 了解当前压缩文件的大小

c++ - 为什么函数不获取动态数组? (我正在使用指针和引用)

c++ - 找不到模式时如何打印 "no mode"?

mysql - 对于电子商务网站来说,理想的 MySQL 事务隔离模式是什么?

java - 界面内容

java - 如何为任何类型的可比较对象实现compareTo

mysqlcheck with --optimize 但仅适用于 MyISAM 表