Qt プロジェクトのアーキテクチャ: アーキテクチャ設計

非常に小規模なマイクロデモ レベルのプロジェクトを除き、コード ファイルを他のプロジェクトとは別のフォルダーに保存するには、統合管理と検索に便利な pri を使用することをお勧めします。同じ種類の機能を持つクラスはまとめて配置することを推奨します。このディレクトリにコードファイルが多すぎる場合は、システム設定フォームを 1 つのディレクトリに配置するなど、複数のディレクトリに分割して格納することも推奨します。ログ管理フォームは 1 つのコンテンツの下に配置されます。

多くの共通関数は複数のプロジェクトで使用されます。それらを一般にホイールとして知られる pri-style モジュールにカプセル化することを検討し、これらのホイールを継続的に改善することができます。複数のプロジェクトがこのモジュールを共有します。バグ修正が発生したら、変更するだけで済みます。一箇所。

プロジェクトがさらに大きい場合、またはプロジェクト チームが別の機能を割り当てる場合は、プラグイン形式を検討できます。一般に、プラグインには 2 つのタイプがあり、1 つは共通のダイナミック ライブラリ形式のプラグインです。メイン プログラムと一緒に配置する必要があるもの、もう 1 つは Qt メカニズムのプラグインであり、指定されたディレクトリに配置されます。インターフェイス プロジェクトが 3 ~ 5 個しかない場合は、これらのインターフェイスを保存する form.pri を作成します。

アーキテクチャは、ビジネス要件からシステム実装までのさまざまなニーズに応じて、ビジネス アーキテクチャ、アプリケーション アーキテクチャ、データ アーキテクチャ、および技術アーキテクチャに分類できます。

1. 事業構造

ビジネス アーキテクチャの設計原則:

  • ビジネスをプラットフォーム化します。ビジネスプラットフォームは、取引プラットフォーム、物流プラットフォーム、決済プラットフォーム、広告プラットフォームなど、互いに独立しています。ユーザー、製品、カテゴリ、プロモーション、適時性など、基本的なビジネスはシンキングされており、再利用できます。
  • 中核事業と非中核事業の分離。メイントランザクションサービスと一般トランザクションサービスなど、電子商取引システムのコア業務とノンコア業務を分離し、コア業務の効率化(安定性に優れる)とノンコア業務の多角化を図る。
  • さまざまな種類のビジネスを分離します。取引プラットフォームの役割は、買い手と売り手が取引契約に署名できるようにすることであるため、ユーザーが迅速に注文できるように高可用性を優先する必要があります。フルフィルメント ビジネスでは、可用性についてはそれほど高い要件はありませんが、一貫性を確保することを優先する必要があります。seckill ビジネスには高い同時実行性に対する高い要件があるため、通常のビジネスから分離する必要があります。
  • メインプロセスと補助プロセスを区別します。

2. アプリケーションのアーキテクチャ

アプリケーション アーキテクチャの設計原則:

  • 安定させます。すべては安定性を中心に展開します。構造は可能な限りシンプルかつ明確であるべきであり、大きくて包括的なものではなく、小さくて美しいことを追求します。過度にデザインしないでください。
  • デカップリング。安定した部分を揮発性の部分から分離します。中核事業と非中核事業の分離。アプリケーションをデータから分離します。サービスと実装の詳細の分離。
  • 概要。アプリケーションの抽象化: アプリケーションはサービスの抽象化のみに依存し、サービス実装の詳細や場所には依存しません。データベースの抽象化: アプリケーションは論理データベースのみに依存し、物理データベースの場所や断片化を気にする必要はありません。サービスの抽象化: アプリケーション仮想化の展開では、物理マシンの構成を気にする必要がなく、リソースが動的に割り当てられます。
  • 疎結合。非同期クロスドメイン呼び出し: 異なるビジネス ドメイン間で非同期的に分離を試みます。非コア業務をできるだけ非同期にする: コア業務と非コア業務の間をできるだけ非同期にするようにします。同期呼び出しが必要な場合は、タイムアウト期間とタスクキューの長さを設定する必要があります。
  • フォールトトレラント設計。サービスの自律性: サービスは、連鎖反応を避けるために、互いに独立して変更、展開、リリース、管理できます。クラスターのフォールト トレランス: アプリケーション システムのクラスター展開、シングルポイント サービスの回避。マルチ コンピュータ ルームの災害復旧: マルチ コンピュータ ルームの展開、マルチアクティブ。

アプリケーション アーキテクチャには、モノリシック アーキテクチャ、分散アーキテクチャ、SOA アーキテクチャなど、いくつかの主なタイプがあります。

2.1 モノリシックアプリケーション

システムにはアプリケーションが 1 つだけあり、それが 1 つのアプリケーションにパッケージ化され、1 つのマシンにデプロイされ、データが 1 つの DB に保存されます。モノリシック アプリケーションは、一般的にプレゼンテーション層、ビジネス層、データ アクセス層、DB 層を含む階層型アーキテクチャを採用しており、プレゼンテーション層はユーザー エクスペリエンスを担当し、ビジネス層はビジネス ロジックを担当し、データ アクセス層はDB層のデータアクセス用。

  • 利点: ワンストップの開発、コンパイル、デバッグ、1 つのアプリケーションにすべての機能が含まれており、テストとデプロイが簡単です。
  • 短所: システムが大きくなると、コードが複雑になり、保守が難しくなり、アプリケーション拡張のレベルが低くなり、ビジネスとモジュールの責任の分割が明確になりません。

2.2 分散アーキテクチャ

分散アプリケーション アーキテクチャでは、これらは互いに独立しており、コードは独立して開発、展開され、API インターフェイスを通じて相互に通信します。通信プロトコルはHTTP、データ形式はJSONが一般的で、アプリケーションの統合方法も比較的簡素化されています。

  • 利点: アプリケーション内の高い凝集性、独立した開発、テストと展開、アプリケーション間の疎結合、明確なビジネス境界、明確なビジネス依存関係、および大規模プロジェクトの並行開発のサポート。
  • 欠点: API インターフェイスの要件が変更されると、アプリケーションを再デプロイする必要があり、通信の信頼性とデータのカプセル化がプロセス内呼び出しに比べて比較的劣ります。

2.3 SOA アーキテクチャ

SOA は分散アプリケーション アーキテクチャの一種でもあり、サービス登録、サービス ルーティング、サービス認可、サービス低下、サービス監視などのサポート サービス ガバナンスを提供します。システムをビジネス全体からより分離して考えてください。

  • 利点: サービス層に焦点を当て、コア ビジネスに焦点を当て、システム全体の共有を提供します。サービスは独立したアプリケーションであり、個別にデプロイされ、明確なインターフェイスを備えており、自動化されたテストとデプロイメントを簡単に行うことができます。サービスはステートレスで水平拡張が容易; コンテナ仮想化テクノロジーにより、障害の分離とリソースの効率的な利用が実現されます。
  • 短所: 複雑なシステムの依存関係、開発/テスト/展開の不便さ、分散データの一貫性と分散トランザクションのサポートの困難、通常は最終的な一貫性を簡素化することで解決されます。

3. 技術アーキテクチャ

技術アーキテクチャは、ソフトウェア システムの実装、オペレーティング システムの選択、ランタイム設計など、ビジネス アーキテクチャで提案された機能 (またはサービス) に対する技術ソリューションの実装です。設計原則:

  • ステタスはありません。つまり、マシン上に状態データを保存しないようにしてください。
  • 再利用可能。再利用の粒度は、サービスの実装の詳細ではなく、ビジネス ロジックを備えた抽象的なサービスです。サービス参照はサービス抽象化にのみ依存します。
  • 疎結合。ビジネス ドメイン間で呼び出しを行い、可能な限り非同期的に分離します。同期呼び出し時のタイムアウトとキュー サイズを設定します。比較的安定した基本サービスを不安定なプロセス サービスから分離します。
  • 管理可能。サービスのダウングレード、トラフィックの制限、オン/オフの切り替え、監視、ホワイトリスト メカニズム、およびサービス契約の策定が可能です。
  • 基本的なサービス。適時性、在庫、価格計算などの基本的なサービスはシンキングされており、再利用可能です。基本的なサービスは自律的で比較的独立しています。基本サービスの実装は合理化され、水平方向に拡張可能である必要があります。基本サービスの実装は、基本サービスに関連するデータも含めて物理的に分離する必要があります。

4. プログラム構成の概要

プログラムアーキテクチャ:
(1) UI モジュール: ビジネスロジック層または他のモジュールからのデータ表示の処理と、ユーザー操作のビジネスロジックモジュールへの送信を担当します。
(2) 通信モジュール: TCP、UDP、mqtt、シリアルポートなど、外部通信を担当するシングルトンモードを採用。
(3) データベースモジュール: データの読み取りと保存。
(4) ビジネスロジックモジュール:通信モジュールから返されたデータを処理し、結果を UI モジュールに通知します。
(5) 中間層: 関連する通信モジュールとビジネス ロジック モジュール。
(6) 独立したモジュール (初期化設定モジュール、デーモンプロセス、更新モジュール、ログ収集モジュール...)。

この記事の利点は、Qt 開発学習教材パッケージ、技術ビデオ (C++ 言語基礎、Qt プログラミング入門、QT シグナルおよびスロット メカニズム、QT インターフェイス開発イメージ描画、QT ネットワーク、QT データベース プログラミング、QTプロジェクトコンバット、QSS、OpenCV、クイックモジュール、インタビューの質問など) ↓↓↓↓下記を参照↓↓記事下部をクリックして料金を受け取ります↓↓

おすすめ

転載: blog.csdn.net/QtCompany/article/details/131584274