gpt4 book ai didi

C++ : Generic interface design for Database

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:16:50 24 4
gpt4 key购买 nike

我有一个用于创建与数据库的连接的类:

class DBHandler
{
public:
DBHandler();
~DBHandler();

int connect();
int execQuery( string query);
string getField( int row, int col);
};

现在有另一个类用于从数据库中获取一些信息,

class DBManager
{
public:
DBManager();
~DBManager();

//Approach 1
string getUsername()
{
//create a query here and use object of DBHandler class to execute it.
}

//Approach 2
string getUsername (struct QueryDetails& qDetails)
{
//create query using fields of structure and execute the query using DBHandler class.
}
};

问题来了:

1 ) 我应该遵循哪种方法:

  • A) 如果我使用方法 1,那么我需要对查询进行硬编码。
  • B) 如果我使用方法 2,那么每次调用函数 getUsername 之前我都需要填充结构。

2 ) 除了这两个通用的解决方案之外,还有更好的解决方案吗?

PS:结构的定义

struct QueryDetails
{
string tableName;
vector<string> colList;
...
};

最佳答案

您的问题非常宽泛,您提供的内容无法为您提供客观的最佳答案。

您的方法 1 具有以下优点:

  • 这是一种稳健且安全的方法:查询是在了解相关对象的情况下编写的
  • 如果数据库发展,很容易找出(文本搜索)对表进行特定查询的位置,并更新对象的查询代码
  • 不用说,如果您的对象发生了变化,您将立即意识到您必须在数据库方面进行哪些更改

主要的不便之处在于,您与数据库紧密相连。如果明天你从 PostGres 换成其他东西,你必须重写每个查询。

您的方法 2 具有以下优点:

  • 非常灵活
  • 如果您的数据库发生变化,您只需更改通用函数。

不便之处在于,这种灵 active 为维护带来了很多风险:您无法确定客户端发送的查询是否正确,数据库布局更改的影响评估很难评估。

最后,由您决定哪一个更符合您的需求。

我个人倾向于赞成 1。但这是主观的,无论如何我都会引入一个附加层以使应用程序代码更加独立于实现对数据库的访问的数据库系统。

但是,根据您的需要,更大的灵 active 可能是有利的。例如,如果您的类实际上是其他类获取自己数据的中间层,那么方法 2 可能是最佳选择。

关于C++ : Generic interface design for Database,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29865314/

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