こんにちは 私はアプリケーションを書いていますが、様々なフォームとそれに対応するデータモジュールがあります。 私は、使用クラス(実装では1つ、相互参照を避けるためにインタフェースではもう1つ)で言及することによってお互いを使用している方法で書きました この方法は間違っていますか?なぜ、私はこのように使うべきですか? ありがとうDelphi DataModuleの使用法 - 単一または複数?
答えて
私はLdsandonに同意しなければなりません、それはあなたのプロジェクトに複数のデータモジュールを持つ方が良い方法です。それをModel-View-Controllerのように見れば、あなたのDBはモデルであり、フォームはビューになり、データモジュールはコントローラになります。
個人的に私は常に私のプロジェクトに少なくとも2つのデータモジュールを持っています。 1つのデータモジュールは、プロジェクト全体でアクション、ImageList、DBConnection、その他のものを共有するために使用されます。ほとんどの場合、これは私の主要なデータモジュールです。
そこから、私のアプリケーションの各「エンティティ」に対して新しいデータモジュールを作成します。例えば、私のアプリケーションが注文、カーソル、およびプロダクトを処理または表示する必要がある場合、それらのそれぞれおよびすべてに対してDatamoduleがあります。
このようにして、機能を明確に分離して、すべてを取り込むことなくビットとピースを簡単に再利用できます。顧客に関連するものが必要な場合は、Customers Datamoduleとそれだけで簡単に使用します。
よろしく、
Stefaan
それはあなたが同じフォームの複数のインスタンスの関連DataModuleの別のインスタンスを使用して、それぞれを作成しようとしている場合は特に、okです。
VCLデザインに少し問題があることに気をつけてください。同じフォームとデータモジュールの2つのインスタンスを作成すると、両方のフォームが同じデータモジュールを指しています(VLCがリンクを解決するため)。データモジュールインスタンスを作成するときに少しトリック:
if FDataModule = nil then
begin
FDataModule := TMyDataModule.Create(Self);
FDataModule.Name := ''; // That will avoid pointing to the same datamodule
end;
+1は、DataModuleの名前でトリックを言及します。 –
見た目のガラスを超えて。私は常にDataModulesの代わりにFormsを使用します。私はそれが共通の理由ではないことを知っています、downvotingの前にお読みください。
私は常にDataModuleの代わりにFormsを使用します。私はそれらをDataMovulesと呼んでいます。
論理的に関連するテーブルの各グループごとに、そのようなDataMovuleを1つ使用します。
DataModuleとFormsの両方がコンポーネントコンテナであり、どちらもデータ関連コンポーネントのコンテナとして効果的に使用できるため、DataModuleの代わりにFormsを使用します。開発中に
:
- 私のアプリケーションの開発が容易です。フォームを使用すると、データコンポーネントを表示して、それらのコンポーネントを簡単に開発できます。
- アプリケーションをデバッグするのが簡単です。一部のビューアコンポーネントをすぐに配置して、実際にデータが表示される場合があります。私は通常、テーブルごとに1ページ、テーブル上のデータをブラウズするために各ページに1つのデータグリッドを持つタブラックを作成します。
- ストレステストの極端な値を試すなど、最終的にデータを操作する可能性があるため、アプリケーションのテストが簡単です。現像後
:私は目に見えない形を回すん
。実際にはDataModuleにすると、データモジュールと同じコンテナ機能が実現します。
しかし、ボーナスを加えてください。フォームはまだそこにあるので、最終的に問題判別のために表示することができます。私はこれについてAbout Boxを使います。
いいえ、私はアプリケーションのサイズやパフォーマンスに顕著なペナルティは感じませんでした。
私はMVCパラダイムを打ち破ろうとしません。私は代わりにそれに固執しようとします。私は私のビューを構成するフォームと私のコントローラを構成するDataMovulesを混在させません。私はそれらを私のビューの一部とは見なさない。それらは私のアプリケーションのユーザインタフェースとして決して使用されません。 DataMovulesはフォームのようなものです。それらは単に便利なエンジニアリング・アーティファクトです。
さて、あなたは*複数のデータ(m/v)のオードルが好きだと思います。 ;) –
フォームはデータモジュールと比較して「ヘビーウェイト」です。実際にはOSの「ウィンドウ」であるため、システムリソースを使用し、winprocなどがあります。Datamoduleははるかに軽量です。表示されていないコンポーネントだけのフォームを表示する必要はほとんどありません。はい、あなたはそれらにいくつかのデバッグ出力を印刷することができます、IMHOはそれを行うためのより良い方法があります。 –
ええ、私は論理的に私のアプリケーションを整理し、再利用を促進するのに必要なだけ多くのものを使用します。 –
テーブルオブジェクト用のデータモジュールです。データベース数が少ない場合は、最初のテーブルにするのが良いでしょう。
あなたの行動のためのデータモジュールだけが別のものです。
イメージリスト専用のデータモジュールは、もう1つの優れた第3のデータモジュールです。このデータモジュールにはイメージリストしか含まれていないため、イメージリストにアクセスする必要があるフォームでは、この共有ロケーションからすべてを使用できます。
テーブルオブジェクトが200個ある場合は、dbテーブル用に複数のデータモジュールが必要な場合があります。請求書発行に関連する20のテーブルと、HRに関連する20のテーブルを持つアプリケーションを想像してみてください。私は、InvoicingDataModuleとHRDataModuleは、それらの内部のテーブルと、それに対して動作するコードが互いに知り合う必要がないか、または1つのモジュールが "uses"依存関係を持っている場合でも分離されているといいでしょう一方向では、その関係は円形ではありません。その場合でさえ、きめ細かなデータモジュールのモジュール化は有益です。
- 1. DelphiのDataModuleでの描画
- 2. LINQを使用した複数リポジトリまたは単一リポジトリ
- 3. ウェブサイトを使用 - 複数のページまたは単一のページ
- 4. 単一または複数のリポジトリクラス?
- 5. 単一または複数のデータベース?
- 6. パフォーマンス:単一または複数の瓶?
- 7. エンタープライズアプリケーション用に複数または単一の仮想ディレクトリを使用する
- 8. MongoDB - SaaSオファリング用の単一データベースまたは複数のデータベース
- 9. Javaサーバー用の単一または複数のスレッドプール?
- 10. DataModule Organization
- 11. ポートマッピングを使用した単一ホストへの複数のURL?
- 12. jqueryを使用した単一イベントの複数のコントロール
- 13. group_concatを使用した単一クエリ内の複数のテキストフィールド
- 14. Delphiのロックフリーキュー「複数のプロデューサ - 単一のコンシューマ」が存在しますか?
- 15. 複数のモバイルデバイス用の単一アプリケーションビルド
- 16. 複数の猿ランナー(Pythonスクリプト)私たちが使用する単一のプログラムについては、単一のスクリプト
- 17. 単一のクエリで同じサブクエリが複数回使用されました
- 18. JQuery/Javascriptを使用した単一のイベントに対する複数の関数
- 19. 複数の単一フィールドインデックス対複数フィールドインデックス
- 20. 複数のサービスまたは複数のスレッドを持つ単一サービス
- 21. MVC3 .net複数モデルまたは単一のビューモデル
- 22. 単一のプロジェクトインスタンスまたは複数のプロジェクトインスタンス?
- 23. 複数のジャー、単一パーシスタンスユニットソリューション?
- 24. 複数のテーブルのIDを単一の列で使用する
- 25. 複数のUserControlsで使用されるUsercontrolの単一のインスタンス
- 26. Cocos2dでは、単一のオブジェクトに複数のタグを使用できますか?
- 27. OpenJPAトランザクション - 単一または複数のエンティティ管理者?
- 28. 複数または単一の化合物インデックス
- 29. 値に基づく単一または複数のINSERT
- 30. 単一の接続で複数のトランザクションを使用して
あなたの質問の性質をより明確に示すために、タイトルを書き直すべきです。あなたはおそらくそれを編集することはできませんので、私はあなたのためにそれをします.... –
IMO、datamodulesはプロジェクトのフォームを決して参照するべきではありません。例えば、フォームがデータセットの変更に反応する必要がある場合は、TDatasourceをそのフォームに配置し、それをデータセットにリンクし、コードをTDatasourceのイベントに配置します。 –
この年のような質問に戻って、私は興味深いことに、あるフォーム、データモジュール、またはユニットにどれくらい押し込むことができるかに限界がない場合、Delphiの開発者は平均して1つのモジュール/ Unit/Fileではなく、実際に意味を持ち、保守可能で読みやすいものを考えています。 –