gpt4 book ai didi

C++ DBI 类 - 最佳/对开发人员最友好的风格

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:34:49 26 4
gpt4 key购买 nike

在我们当前的项目中,我们需要针对不同数据库的一些高级 DBI。它应该提供以下功能:

  • 在内存缓存中 - DBI 应该能够缓存所有读取,并在写入调用时更新缓存(我们正在编写的应用程序是重线程,需要快速访问当前数据每时每刻)。内存缓存将基于 boost::multi_index
  • 自动 sql 构建 - 我们不想解析 sql 语句以在内存缓存中查找

由于我们需要提供以下功能:定义表格布局、执行选择、执行插入、执行更新、连接……,界面将变得非常复杂。

我们需要一种调用接口(interface)函数的好方法。

周围有很多样式,但我们找不到对我们的使用有用的样式。

举几个例子:

社会责任感

sql << "select name, salary from persons where id = " << id, into(name), into(salary);

我们不需要一些 SQL 语句,所以我们必须以不同的方式定义 whatfrom

pqxx

Conn.prepare("select_salary",
"select name, salary from persons where id = $1")
((string)"integer",prepare::treat_direct);

重载的 operator() 的大量使用很丑陋,但它也可以为我们工作。

有什么关于如何设计界面的建议吗?

最佳答案

使用对象关系映射怎么样?这是我头脑中的一些代码片段想法——我只在 Python 中完成过,从未在 C++ 中完成过,而且只针对相当简单的数据库。有一个 list of frameworks on Wikipedia这应该避免太多与车轮相关的研发。

class people: public dbi_table
{
// id column handled by dbi_table.
name: string_column;
salary: money_column;
};

class cost_center: public dbi_table
{
name: string_column;
office: foreign_key<offices>;
};

class people_cost_center_link: public link_table
{
// Many-many relationships.
};

然后您可以将记录作为对象来操作,所有相关的东西都由框架处理。查询是通过定义查询对象然后获取结果的迭代器来完成的(有关代码示例,请参见 the ODB wikipedia page)。

关于C++ DBI 类 - 最佳/对开发人员最友好的风格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6552660/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com