2

私の質問が明確でない場合は、コメントで改善するのを手伝ってください。

私はDelphiとdbExpressを初めて使用し、TSQLDataset、TDataSetProvider、TClientDataSet、およびTDataSourceクラスに精通しています。

私が取り組んでいるプロジェクトでは、このコンポーネントを不思議な方法で使用しています。前に説明したクラスのカルテットがたくさん含まれている巨大なデータモジュールユニットがあります。これを行うには、より良い(そしてよりモジュール化された)方法があると思います。DataSnapは、このデータモジュールをサーバーアプリケーションに配置するためにのみ使用されるため、クライアントはそれを介してデータにアクセスします。

それで、私の疑問のいくつかを説明しようと思います:

  1. このクラスのそれぞれの役割は何ですか?ドキュメントを読みましたが、このテーマに関する実用的な洞察を得ることができません(特にTDataSetProviderについて)。
  2. どのクラスをデータモジュールに含める必要があり、どのクラスをフォームに含める必要がありますか?
  3. データベース設定からビジネスモデルを抽象化するための中間層を作成することは可能ですか(不変のデータセットを返す関数を作成する可能性がありますか?)?
  4. もしそうなら、DataSnapを使用してそうするのが賢明ですか?

よくわからなくてごめんなさい。前もって感謝します。

4

2 に答える 2

5

コンポーネント

TDataSourceは、データベース対応コントロールと、値を取得するデータセット(TDataSetの子孫)の間のブリッジです。

TClientDataSetはそのようなデータセットの1つです。TClientDataSetは、たとえばxmlファイルに含まれるデータにアクセスするために単独で使用できますが、TDataSetProviderに接続することもできます。

TDataSetProviderは、メモリ内のTClientDataSetと、ある種のドライバーを介してデータベースからデータを取得する実際のデータセットとの間のブリッジです。クライアントサーバー開発では、通常、TRemoteDataSetProvider(名前が異なる場合があります。これらのコンポーネントを頻繁に使用することはありません)が表示され、クライアントとサーバー間のギャップを埋めます。

TSQLDataSetは、データベースからデータを取得する実際のデータセットです。

このカルテットがすべて1つの実行可能ファイルに含まれているのを見るのは奇妙に感じます。サーバー側のTSQLDataSetがTRemoteDataSetProviderのカウンター部分に接続されていることを期待します。ただし、組み込みデータベースを使用すると、ブリーフケースモデルをサポートする方法になる可能性があります。これは、TClientDataSetが非常に役立つ場所です(TClientDatasetは非常に強力であり、その長所の1つにすぎません)。


単一のデータモジュール

痛い。単一の巨大なデータモジュールは、遅延プログラミングまたはデータモジュールの使用方法に関する誤解の結果です。データベース接続を「ホスト」する単一のデータモジュールがあり、それがアプリケーションの側面により厳密に焦点を合わせた他のさまざまなデータモジュールによって使用されるのは完全に正常です。


ドメインの抽象化

ビジネスモデルの抽象化に関して、dbexpressとdatasnapは実際にはビジネスモデルのどこにあってはなりません。それらはデータレイヤーの一部である必要があります。

TDataSource、TClientDataSet、およびカスタムTDataSetProviderの子孫を使用して、UIをビジネスモデルから分離したまま、UIのデータベース対応コントロールの機能を活用できます。この場合、カスタムTDataSetProviderは、クライアントデータセットとドメインレイヤーのコレクションおよびインスタンスの間のブリッジになります。

それでも、TRemoteDataSetProvidersまたはストレートTDataSetの子孫(TSQLDataSetなど)を使用してドメインレイヤーにデータを提供する、別のデータレイヤーが表示されることを期待します。

あなたが言及した単一の巨大なデータモジュールは、そのデータレイヤーの一部である可能性があり、クライアントデータセットはビジネスレイヤーにそのデータを提供します。一般的なカルテットの一部としてTDataSourceについても言及しているように、アプリケーションはおそらくRADデータ対応の方法で開発されており、UIコントロールは基本的にデータベースの列/テーブルに直接接続されています。

このアプリケーションをより階層化されたアーキテクチャに変換する場合は、慎重にゆっくりと踏み込んでください。最初に現在のアーキテクチャを理解し、この種の変換が与える影響を理解するのに十分な知識を身に付けてください。Sergが提供するリンクは確かにそこであなたを助けます。Pawel Glowackiは、DataSnapについて幅広く書いています。

于 2011-10-02T18:37:05.950 に答える
2

作業中のプロジェクトはDelphi多層データベースアプリケーションです

あなたの質問はSOには広すぎて、現在の形ではほとんど答えることができません-基礎となるアーキテクチャを理解することを学ぶ必要があります。

PawelGlowackiによるビデオチュートリアルから始めることができます。

http://www.youtube.com/watch?v=B4uxLLIUddg

http://cc.embarcadero.com/item/28188

于 2011-10-02T18:17:17.043 に答える