[Qt] c++/Qtで拡張しやすいデータベースアクセス方式(オブジェクト指向プログラミング)、java-hibenateに似たデータアクセスフレームワーク(未完成)

章のナビゲーション

1 データベース運用におけるオブジェクト指向の具体化方法

単元のプロジェクトは分業がうまくいっていないため、Qtプログラミングに加えてJavaやフロントエンド開発言語も習得する必要があり、継承などのポリモーフィズムなどオブジェクト指向の機能が多く使われます。 、意識的にさまざまなクラスをカプセル化していますが、コードスタイルは依然としてプロセス指向プログラミングの影響を大きく受けており、Java の mvc プログラミングを使用するときに意図せずに従うことができるオブジェクト指向プログラミングとは程遠いコード仕様のギャップは非常に大きいです。十分に成熟した C++ フレームワークがないことは否定しませんが、良いフレームワークがある場合は、それをお勧めしてください。
私の現在の経験によると、コードを蓄積せずに C/C++ でデータベースの読み書きを行うことは困難です。新しいデータ アクセス要件がある場合、データベース アクセス ロジック全体を書き換えてデータを取得し、その後業務処理ロジックで使用することがよくあります。さらに、マルチスレッドや接続の安定性などの問題も考慮する必要があります。また、Java は Hibernate オブジェクト リレーショナル マッピング フレームワーク (toBean メソッドを使用して pojo クラスに変換するマップ マッピング) を介したデータ アクセスを適切にサポートしているため、現在、私は主に Java バックグラウンドを使用してデータベース データの読み書きと一部の処理を実行しています。データ処理. C側に転送してから表示関連の処理を行う場合、Cではデータベースに直接アクセスしないようにするため、やはりC++側でのシリアライズやデシリアライズの必要があり、実装方法は様々です。 Qtクラスを使用することもできます、QDataStreamを使用することもできます Wait、この点は他の記事で整理されます。
しかし今は、Qt のデータベースにアクセスしてデータの読み取りと書き込みを行う機能を使用したいと考えています。一般的なブログでの紹介は、Qt 独自のクラスを使用してライブラリ ファイルの有効性を判断し、ライブラリに接続し、ライブラリ内のデータをクエリする方法です。 、データをビジネス処理またはインターフェイス表示に適用します。このようなプロセスでは、チーム開発中のコード分離や、複雑なビジネスのコード設計はほとんど考慮されません。少し良い点としては、DAO モデルに従うことやマルチスレッドの問題が少し考慮されることです。特定のカプセル化はクラスを通じて実行されますが、クラス関数の設計にはまだ汎用性が不足しています。
たとえば、この記事の
QT データベース パッケージ クラス - マルチスレッドをサポートします
マルチスレッド操作をサポートする単一の特定のデータ構造に対するデータベース読み取りおよび書き込みクラスを提供しますが、データ操作ツールを抽象化したり、DAO レイヤーの完全なプログラミング例を提供したりすることはありません。次の記事「DAO モードとは」を参照してください。実装
方法
には、基本的に hibenate を使用する機能を備えたデータベース アクセス ツールが必要です。データベース接続を閉じ、データベースの状態を判断し、ログを記録し、型識別に応じて異なる読み取りを実現できます (ロジックを記述すると、データベースクエリのフィールドタイプとデータ構造定義に従って、読み込んだデータをJSONObjectのような構造に事前に詰め込み、さらに結果List<ClassA>を生成します。 。この方法によってのみ、データベースのライブラリ操作、データ アクセス操作 (異なるライブラリの異なる実装)、データ アクセスの記述 (共通コード)、およびデータ構造 (共通コード) を個別にプログラムして、良好なスケーラビリティと移行を実現できます。 。
CDataAccessUtil クラスの作成を検討してください。このクラスは、構成記述ファイルを通じてデータベース接続情報とデータベースタイプを取得し、対応する方法 (データファイルアクセス、ドライバーベースの odbc サービス接続など) でデータベース接続を確立できます。 "db1"、"class1" などのアクセス識別子、および "type:process1;id:10086" などのクエリ パラメータは、データを取得するための対応する SQL クエリ ステートメントを形成し、結果は対応するタイプとして出力できます。 「class1」が提供する変換機能により、異なる出力タイプを出力可能 ログ情報の詳細レベル。
要するに、Java で行われていることを、C++ 上にこのホイールがあるはずだと思うのですが、何を使用すればよいのかわかりません。

2 ホイール製造材料に関する参考文献

  1. QT データベースカプセル化クラス - マルチスレッドをサポート
  2. Qt 独自のデータベース QSQLITE (非常に具体的な例)
  3. 360 によって休止状態にする
  4. 階層型データクラス
  5. JSONとJAVA POJOの相互変換ツールクラス
  6. C++ で SQL のようなコンテナーを実装する方法: Boost-MultiIndex

3 つの既製のフレーム スキーム

DTL と SOCI と DAU (2012 年の投稿)
構造リレーショナル マッピング (SRM) 7 階の投稿を参照

Supongo que te gusta

Origin blog.csdn.net/starfire_hit/article/details/126843651
Recomendado
Clasificación