首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++ DBI类-最佳/最友好的开发人员风格

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

Stack Overflow用户
提问于 2011-07-01 19:56:48
回答 2查看 654关注 0票数 2

在当前的项目中,我们需要为不同的数据库提供一些高级别的DBI。它应提供以下特点:

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

由于我们需要提供如下功能:定义表布局、做选择、做插入、做更新、连接、.,接口将变得非常复杂。

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

有许多样式,但我们找不到任何有用的我们的使用。

这里有几个例子:

SOCI

代码语言:javascript
复制
sql << "select name, salary from persons where id = " << id, into(name), into(salary);

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

pqxx

代码语言:javascript
复制
Conn.prepare("select_salary",
    "select name, salary from persons where id = $1")
    ((string)"integer",prepare::treat_direct);

重载的operator()的大量使用是丑陋的,但它也可能对我们有用。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-05 08:54:30

使用对象关系映射如何?下面是一些我头上的代码片段想法--我只在Python中这样做过,从来没有用过C++,而且只针对相当简单的数据库。有一个维基百科的框架列表应该避免过多的车轮相关的研发。

代码语言:javascript
复制
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.
};

然后,您可以将记录作为对象进行操作,所有关系内容都由框架处理。查询是通过定义一个查询对象,然后获得一个迭代器来完成的(参见ODB维基百科页面 )。

票数 1
EN

Stack Overflow用户

发布于 2011-07-05 18:41:13

我会这样做(从c++的角度来看,如果它是正确的数据库内容,它会很好,不知道):

代码语言:javascript
复制
struct Handle { int id; }
class DBI 
{
public:
   virtual Handle select(int column_id)=0;
   virtual Handle select(int column1, int column2)=0;
   virtual Handle id(int id)=0;
   virtual Handle join(Handle i1, Handle i2)=0;
   virtual void execute_query(Handle i)=0;
};

通常,这些功能的实现方式如下:

代码语言:javascript
复制
Handle select(int column_id) {
   return new_handle(new SelectNode(column_id));
}

其中new_handle函数只需将SelectNode插入std::SelectNode或std::map并为其创建句柄。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6552660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档