プロジェクトに存在するメンバー変数にアクセスするための適切な方法について以前に尋ねました。このプロジェクトでは、私はCWinappから派生したクラス、CMainFrmクラス、異なるビュークラスのリストを持っています。しかし、現在、CWinApp派生クラスでインスタンス化された別のユーザー定義クラスのインスタンスがあり、残りのクラスはAfxGetApp()関数から取得したポインターを使用し、別のユーザー定義クラスにアクセスします。私はMFCニュースグループのコミュニティメンバーから、これは非常に悪いデザインであると言われました(つまり、親クラスはアプリケーションクラス、ビュークラス、またはドキュメントクラスについて何も知ってはいけません)。しかし、私は、このデザインを使用せずにさまざまなユーザー定義のクラスにどのようにアクセスできるかについてはわかりません。私は適切な検索条件を思い付くためにMFCに精通していないので、いくつかの提案を聞くことは素晴らしいことです。シングルドキュメントプロジェクトの構造
0
A
答えて
0
「(つまり、親がアプリクラス、ビュークラス、またはドキュメントクラスについて何を知っているべきではありません)」
私はこの文章を理解していない、あなたはここで「親」で何を意味しています?
とにかく、私の意見では、あなたが描いたデザインは本当に問題ではありません。トレードオフです:これらのクラスを必要とするすべての関数に渡すか、APIの使用やAPIを複雑にするか、グローバル変数のように格納しますか?アクセスされるデータとアクセス頻度によって異なります。多くの場所で必要とされるデータは、同様に「グローバル」である可能性があります。
データを「グローバル」にするには、CWinAppのメンバー(つまり、CWinApp派生クラス)またはCMainFrameのメンバーにするか、実際のグローバル変数を作成するか、シングルトンを作る...
グローバル変数の問題は、どこにどこからアクセスするのかを把握することが難しくなることです。あなたがCWinAppのメンバーとしてデータを持っていれば、アクセッサ関数を使ってデータにアクセスし、そこからのアクセスをトレースすることができます(ログメッセージ、ブレークポイントなど)。これは、グローバル変数に関連する問題のほとんどを緩和します。私が通常やっているのは、Lokiシングルトンを使うことです。
デカップリングの問題としてデータをCWinAppのメンバーにしていないというあなたのポストに記載されている理由は、少し奇妙なことです。特定のクラスにアクセスが必要な場合は、とにかくそれらのデータ構造を知る必要があり、その格納場所は無関係です。たぶん私はあなたのデザインの詳細を知らないからです。
関連する問題
- 1. ツリーデータ構造のデータベース構造
- 2. C構造体内の構造体内部の構造体
- 3. 私のスイッチ構造dosent(JavaScriptコントロール構造)
- 4. アプリケーションのクラス構造とデータベース構造
- 5. ActionScript 3のパッケージ構造とディレクトリ構造
- 6. 構造体内の構造体
- 7. 構造体の配列 - 構造体?
- 8. 階層構造を表すデータ構造
- 9. iOS CFデータ構造とNSデータ構造
- 10. XML構造からMySQLテーブル構造へ
- 11. Javaパッケージ構造とフォルダ構造
- 12. 構造
- 13. フレックスプロジェクトの構造
- 14. ポインタの構造
- 15. 構造のインスタンス
- 16. 構造のテーブル
- 17. コメントシステムの構造
- 18. Codeigniterの構造
- 19. インストーラウィザードの構造
- 20. データテーブルの構造
- 21. GoLangの構造
- 22. コンソールアプリケーションの構造
- 23. マトリックスの構造
- 24. バイオインフォマティクスのデータ構造
- 25. 春のフレームワーク構造
- 26. Cのカレンダー構造
- 27. データベース構造のフィードバック
- 28. Androidパッケージの構造
- 29. 構造のヘルプ(セグメンテーションフォールト)
- 30. Cのエージングデータ構造
私はいくつかの変数をCWinApp派生クラスでインスタンス化することでグローバルとして利用できるようにするという目標を達成しようとしています。私はこれがおそらく私が今考えることができる最良の方法だと思うので、これにもっと時間を投資すべきではありません。コメントしてくれてありがとう。 – stanigator