2010-11-23 35 views
7

こんにちは 私はアプリケーションを書いていますが、様々なフォームとそれに対応するデータモジュールがあります。 私は、使用クラス(実装では1つ、相互参照を避けるためにインタフェースではもう1つ)で言及することによってお互いを使用している方法で書きました この方法は間違っていますか?なぜ、私はこのように使うべきですか? ありがとうDelphi DataModuleの使用法 - 単一または複数?

+0

あなたの質問の性質をより明確に示すために、タイトルを書き直すべきです。あなたはおそらくそれを編集することはできませんので、私はあなたのためにそれをします.... –

+3

IMO、datamodulesはプロジェクトのフォームを決して参照するべきではありません。例えば、フォームがデータセットの変更に反応する必要がある場合は、TDatasourceをそのフォームに配置し、それをデータセットにリンクし、コードをTDatasourceのイベントに配置します。 –

+1

この年のような質問に戻って、私は興味深いことに、あるフォーム、データモジュール、またはユニットにどれくらい押し込むことができるかに限界がない場合、Delphiの開発者は平均して1つのモジュール/ Unit/Fileではなく、実際に意味を持ち、保守可能で読みやすいものを考えています。 –

答えて

9

私はLdsandonに同意しなければなりません、それはあなたのプロジェクトに複数のデータモジュールを持つ方が良い方法です。それをModel-View-Controllerのように見れば、あなたのDBはモデルであり、フォームはビューになり、データモジュールはコントローラになります。

個人的に私は常に私のプロジェクトに少なくとも2つのデータモジュールを持っています。 1つのデータモジュールは、プロジェクト全体でアクション、ImageList、DBConnection、その他のものを共有するために使用されます。ほとんどの場合、これは私の主要なデータモジュールです。

そこから、私のアプリケーションの各「エンティティ」に対して新しいデータモジュールを作成します。例えば、私のアプリケーションが注文、カーソル、およびプロダクトを処理または表示する必要がある場合、それらのそれぞれおよびすべてに対してDatamoduleがあります。

このようにして、機能を明確に分離して、すべてを取り込むことなくビットとピースを簡単に再利用できます。顧客に関連するものが必要な場合は、Customers Datamoduleとそれだけで簡単に使用します。

よろしく、

Stefaan

6

それはあなたが同じフォームの複数のインスタンスの関連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; 
+0

+1は、DataModuleの名前でトリックを言及します。 –

2

見た目のガラスを超えて。私は常にDataModulesの代わりにFormsを使用します。私はそれが共通の理由ではないことを知っています、downvotingの前にお読みください。

私は常にDataModuleの代わりにFormsを使用します。私はそれらをDataMovulesと呼んでいます。

論理的に関連するテーブルの各グループごとに、そのようなDataMovuleを1つ使用します。

DataModuleとFormsの両方がコンポーネントコンテナであり、どちらもデータ関連コンポーネントのコンテナとして効果的に使用できるため、DataModuleの代わりにFormsを使用します。開発中に

  • 私のアプリケーションの開発が容易です。フォームを使用すると、データコンポーネントを表示して、それらのコンポーネントを簡単に開発できます。
  • アプリケーションをデバッグするのが簡単です。一部のビューアコンポーネントをすぐに配置して、実際にデータが表示される場合があります。私は通常、テーブルごとに1ページ、テーブル上のデータをブラウズするために各ページに1つのデータグリッドを持つタブラックを作成します。
  • ストレステストの極端な値を試すなど、最終的にデータを操作する可能性があるため、アプリケーションのテストが簡単です。現像後

:私は目に見えない形を回すん

  • 。実際にはDataModuleにすると、データモジュールと同じコンテナ機能が実現します。

  • しかし、ボーナスを加えてください。フォームはまだそこにあるので、最終的に問題判別のために表示することができます。私はこれについてAbout Boxを使います。

いいえ、私はアプリケーションのサイズやパフォーマンスに顕著なペナルティは感じませんでした。

私はMVCパラダイムを打ち破ろうとしません。私は代わりにそれに固執しようとします。私は私のビューを構成するフォームと私のコントローラを構成するDataMovulesを混在させません。私はそれらを私のビューの一部とは見なさない。それらは私のアプリケーションのユーザインタフェースとして決して使用されません。 DataMovulesはフォームのようなものです。それらは単に便利なエンジニアリング・アーティファクトです。

+1

さて、あなたは*複数のデータ(m/v)のオードルが好きだと思います。 ;) –

+8

フォームはデータモジュールと比較して「ヘビーウェイト」です。実際にはOSの「ウィンドウ」であるため、システムリソースを使用し、winprocなどがあります。Datamoduleははるかに軽量です。表示されていないコンポーネントだけのフォームを表示する必要はほとんどありません。はい、あなたはそれらにいくつかのデバッグ出力を印刷することができます、IMHOはそれを行うためのより良い方法があります。 –

+0

ええ、私は論理的に私のアプリケーションを整理し、再利用を促進するのに必要なだけ多くのものを使用します。 –

2

テーブルオブジェクト用のデータモジュールです。データベース数が少ない場合は、最初のテーブルにするのが良いでしょう。

あなたの行動のためのデータモジュールだけが別のものです。

イメージリスト専用のデータモジュールは、もう1つの優れた第3のデータモジュールです。このデータモジュールにはイメージリストしか含まれていないため、イメージリストにアクセスする必要があるフォームでは、この共有ロケーションからすべてを使用できます。

テーブルオブジェクトが200個ある場合は、dbテーブル用に複数のデータモジュールが必要な場合があります。請求書発行に関連する20のテーブルと、HRに関連する20のテーブルを持つアプリケーションを想像してみてください。私は、InvoicingDataModuleとHRDataModuleは、それらの内部のテーブルと、それに対して動作するコードが互いに知り合う必要がないか、または1つのモジュールが "uses"依存関係を持っている場合でも分離されているといいでしょう一方向では、その関係は円形ではありません。その場合でさえ、きめ細かなデータモジュールのモジュール化は有益です。

関連する問題