gpt4 book ai didi

c++ - 我可以(应该)将我的 DBClientConnection 用作全局变量吗?

转载 作者:太空宇宙 更新时间:2023-11-04 11:56:02 25 4
gpt4 key购买 nike

  • Windows 7 SP1
  • MSVS 2010
  • MongoDB 2.2.0
  • Qt 4.8.4

编写单线程应用程序。我总是将 DBClientConnection 作为引用参数传递给任何需要访问 MongoDB 的函数。我可以改用全局变量,这样我就不必传递参数了吗?

这是在使用 Qt 的 QKeyEvent 时出现的。这是用这个原型(prototype)实现的:

void keyPressEvent(QKeyEvent * key_event);

重新实现:

void QWidget::keyPressEvent ( QKeyEvent * event )

我想从哪个函数调用 MongoDB 函数,但我无权访问 keyPressEvent 中的 DBClientConnection。因此,为什么我正在考虑使 DBClientConnection 成为全局性的。

最佳答案

推荐的解决方案是对数据库对象进行抽象。

Here is an explanation of the concept in C#

但是简单的说C++的话,目的就是定义一个接口(interface)。就这样。 IDatabaseIRepository

正如您所建议的,它或多或少具有全局值的作用,但是您将把它隐藏到 FactoryDependencyInjection 机制中...如果你真的想要的话,像 Singleton 这样的值。

但是具体的 class 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
};

在您的逻辑/业务代码中,您只能拥有:

IDatabase& database = getDatabase();
std::vector<Something> somethings = database.query_something();

IDatabase 将公开查询、插入和其他 CRUD 操作的所有功能。背后的想法被称为“松散耦合”。

看看它是否值得编码。这取决于您在应用程序中执行此类操作的次数。一般来说,对于像数据库这样大的东西,这是一个非常好的主意。

关于c++ - 我可以(应该)将我的 DBClientConnection 用作全局变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16112169/

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