我有一个用于创建与数据库连接的类:
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)我应该遵循哪种方法:
2)除了这两个通用之外,还有更好的解决方案吗?
PS:结构的定义
struct QueryDetails
{
string tableName;
vector<string> colList;
...
};
答案 0 :(得分:1)
您的问题非常广泛,您提供的要素不允许向您提出客观的最佳答案。
您的方法1具有以下优势:
主要的不便之处在于,您与数据库紧密相连。如果明天您从PostGres更改为其他内容,则必须重写每个查询。
您的方法2具有以下优势:
不便之处在于,这种灵活性会给维护带来很多风险:您无法确定客户端是否发送了正确的查询,并且很难评估数据库布局更改的影响评估。
最后,由您决定哪一个更适合您的需求。
我个人倾向于支持1.但这是主观的,我还是引入了一个额外的层来使应用程序代码更加独立于实现数据库访问的数据库系统。
但是,根据您的需要,更大的灵活性可能是有利的。例如,如果您的类实际上是其他calsses获取自己的数据的中间层,那么方法2可能是最佳选择。