我正在用 C++ 编写一个长时间运行的多线程服务器。它在套接字上接收请求,进行数据库查找并在套接字上返回响应。
服务器从配置文件中读取各种运行信息,包括数据库连接参数。我必须使用公司代码库中的数据库抽象类。我不想等到尝试进行数据库搜索以延迟实例化数据库连接(由于未显示复杂性,并且如果无法建立数据库连接,则需要在启动时退出错误)。
我的问题是如何将数据库连接信息放到搜索类中,而无需做任何技术上可行的“丑陋”或糟糕的 OOP 事情。我想学习如何正确地做到这一点。
是否有一个很好的设计模式来做到这一点?我应该使用“从上方参数化”模式吗?我错过了一些更简单的组合模式吗?
// Read config file.
// Open DB connection using config values.
Server::process_request(string request, string response) {
try {
Process process(request);
if (process.do_parse(response)) {
return REQ_OK;
} else {
// handle error
}
} catch (..,) {
// handle exceptions
}
}
class Process : public GenericRequest {
public:
Process(string *input) : generic_process(input) {};
bool do_parse(string &output);
}
bool Process::do_parse(string &output) {
// Parse the input request.
Search search; // database search object
search.init( search parameters from parsing above );
output = format_response(search.get_results());
}
class Search {
// must use the Database library connection handle.
}
如何将数据库连接从顶部的 Server 类获取到上面伪代码底部的 Search 类实例?