C++ 我是否可以(应该)将DBClientConnection用作全局变量? Windows 7 SP1 MSVS 2010 MongoDB 2.2.0 Qt 4.8.4
编写单线程应用程序。我总是将DBClientConnection作为引用参数传递给任何需要访问MongoDB的函数。我可以改用全局变量,这样就不必传递参数了吗 这是在使用Qt的QKeyEvent时出现的。这是通过以下原型实现的:C++ 我是否可以(应该)将DBClientConnection用作全局变量? Windows 7 SP1 MSVS 2010 MongoDB 2.2.0 Qt 4.8.4,c++,qt,mongodb,C++,Qt,Mongodb,编写单线程应用程序。我总是将DBClientConnection作为引用参数传递给任何需要访问MongoDB的函数。我可以改用全局变量,这样就不必传递参数了吗 这是在使用Qt的QKeyEvent时出现的。这是通过以下原型实现的: void keyPressEvent(QKeyEvent * key_event); 重新实施: void QWidget::keyPressEvent ( QKeyEvent * event ) 我想从哪个函数调用MongoDB函数,但在keyPressEvent
void keyPressEvent(QKeyEvent * key_event);
重新实施:
void QWidget::keyPressEvent ( QKeyEvent * event )
我想从哪个函数调用MongoDB函数,但在keyPressEvent中我无权访问DBClientConnection。因此,我考虑将DBClientConnection作为一个全局连接 推荐的解决方案是数据库对象的抽象 <>但是简单地说,在C++中,目的是定义一个接口。就这些
IDatabase
或IRepository
正如您所建议的,它或多或少具有全局值的作用,但您将其隐藏到工厂
或依赖注入
机制中。。。如果您确实需要,也可以使用全局值,如单例
但是具体的类MyMongoDatabase
将实现连接,并指向真正的mongoDb,这应该是指针的麻烦所在。而不是应用程序的其余部分最重要的是,如果它位于GUI内部,如您计划访问数据库的QWidget::keyPressEvent
class MyMongoDatabase : public IDatabase
{
private:
void connect();
void disconnect();
public:
std::vector<Something> query_something(int param);
void insert(AnOtherThing& thing);
//.... other crud operations
};
MyMongoDatabase类:公共IDatabase
{
私人:
void connect();
无效断开连接();
公众:
std::向量查询(int参数);
无效插入(另一项和另一项);
//……其他积垢操作
};
在逻辑/业务代码中,您只能有:
IDatabase& database = getDatabase();
std::vector<Something> somethings = database.query_something();
IDatabase&database=getDatabase();
std::vector somethings=数据库.query_something();
而IDatabase
将公开所有查询、插入和其他CRUD操作的函数。背后的想法被称为“松耦合”
看看它是否值得编码。这取决于您在应用程序中执行此类操作的时间。一般来说,对于像数据库这样大的东西,这是一个非常好的主意。推荐的解决方案是对数据库对象进行抽象 <>但是简单地说,在C++中,目的是定义一个接口。就这些
IDatabase
或IRepository
正如您所建议的,它或多或少具有全局值的作用,但您将其隐藏到工厂
或依赖注入
机制中。。。如果您确实需要,也可以使用全局值,如单例
但是具体的类MyMongoDatabase
将实现连接,并指向真正的mongoDb,这应该是指针的麻烦所在。而不是应用程序的其余部分最重要的是,如果它位于GUI内部,如您计划访问数据库的QWidget::keyPressEvent
class MyMongoDatabase : public IDatabase
{
private:
void connect();
void disconnect();
public:
std::vector<Something> query_something(int param);
void insert(AnOtherThing& thing);
//.... other crud operations
};
MyMongoDatabase类:公共IDatabase
{
私人:
void connect();
无效断开连接();
公众:
std::向量查询(int参数);
无效插入(另一项和另一项);
//……其他积垢操作
};
在逻辑/业务代码中,您只能有:
IDatabase& database = getDatabase();
std::vector<Something> somethings = database.query_something();
IDatabase&database=getDatabase();
std::vector somethings=数据库.query_something();
而IDatabase
将公开所有查询、插入和其他CRUD操作的函数。背后的想法被称为“松耦合”
看看它是否值得编码。这取决于您在应用程序中执行此类操作的时间。一般来说,对于像数据库这样大的东西,这是一个非常好的主意