長時間実行されるマルチスレッドサーバーをC++でコーディングしています。ソケットでリクエストを受信し、データベースルックアップを実行して、ソケットで応答を返します。
サーバーは、データベース接続パラメーターなど、構成ファイルからさまざまな実行情報を読み取ります。会社のコードライブラリのデータベース抽象化クラスを使用する必要があります。DB接続を遅延インスタンス化するためにDB検索を実行しようとするまで待ちたくありません(複雑さが示されていないことと、DB接続を確立できない場合は起動時にエラーが終了する必要があるため)。
私の問題は、技術的に機能する「醜い」または悪い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.
}
上部のサーバークラスから上記の擬似コードの下部にある検索クラスインスタンスにDB接続を取得するにはどうすればよいですか?