2

ADOModule、SDACModule、AstaModule の 3 つの異なる DataModule があります。使用する DB コンポーネント (ADO、SDAC、Asta) を除いて、すべて同じです。

これらの DataModule はすべて同じ仕事をしますが、異なるコンポーネントを使用します。つまり、すべての内部選択と実行は同じです。

私が探しているのは、このすべての DataModules を 1 つの BaseDataModule に結合し、ADOModule、SDACModule、および AstaModule のそれぞれを強制的に BaseDataModule から継承させる方法です。

メソッドとプロパティを継承するのは簡単だと思いますが、コンポーネントから継承するのは初めてです。そうするための良い方法はありますか?プロジェクトの目標: コーディングとコピーと貼り付けを最小限に抑えます。

4

2 に答える 2

1

別の道を提案させてください。TClientDataset他の特定のデータセットではなく、すべてに基づいて DataModules を作成することをお勧めします。必要なすべてのプロパティとメソッドを追加し、常にTClientDatasetインスタンスを操作します。

IDataProvider次に、データを選択して SQL ステートメントを実行するメソッドを提供するデータ アクセス サービス インターフェイス (たとえば、 ) を作成します。select メソッドはクエリ テキストを受け取り、OleVariant見つかったすべてのレコードを保持する を返します (Data内部 のプロパティTClientDataset)。これは、DataModuleのインスタンスのプロパティOleVariantに割り当てられると、データが入力されます。DataTClientDataset

最後に、実装クラスを に書き込みますIDataProvider。これらのクラスは、サポートする必要がある特定のデータ アクセス テクノロジに依存します。

このアーキテクチャにより、アプリケーションはデータ アクセス方法から完全に独立したものになります。将来、データを取得するための第 4 の方法が必要になった場合、新しい実装を追加するだけでIDataProvider、残りはすべて引き続き機能します。

これらの実装クラスを個別のパッケージに入れると、アプリケーションを再コンパイルすることなく、それらのパッケージを動的にロードすることで、さまざまなデータ アクセス方法で動作するようにアプリケーションを動的に設定できます。それがどれほど素晴らしいか考えてみてください!

于 2014-04-04T11:17:57.560 に答える
0

利用可能なオプションはいくつかありますが、私がとるアプローチは次のとおりです。

  1. データベースおよびクエリ コンポーネントの抽象基本クラスを作成します。基本クラスは、必要になるすべてのメソッドとプロパティを定義する必要があります。

  2. 基礎となるデータ アクセス レイヤーの効果的なラッパーである各データ アクセス レイヤーの具体的な子孫を作成します。

  3. 現在のデータ モジュール コードを、特定のタイプのアクセス レイヤーではなく、抽象コンポーネント タイプを参照する非ビジュアル ユニットに移動します。

  4. アクセス レイヤーを簡単に切り替えたり、将来的に新しいレイヤーを追加したりすることもできます。

これは、アダプター (またはラッパー) パターンの典型的な例です。

車輪を再発明したくない場合は、tiOPF、InstantObjects、または TMS Aurelius などの OPF/ORM ソリューションを検討することを検討してください。これにより、同じ機能とそれ以外の機能が提供されます。

于 2014-04-03T13:24:25.393 に答える