2011-10-21 3 views
0

私は、Personsデータベーステーブルのラッパーとして機能するクライアントデータセットCDSPersonを持っているとします。私は別のテーブル、PersonBenefitsを持ち、1:1をPersonsテーブルに戻しているとします。管理が難しいかiクライアントデータセットを別のクライアントデータセットから継承するか?

私は、CDSPerson、PersonClass、CDSPersonBenefits、PersonBenefitsClassのまわりの別のクラスをDelphiクラスで囲んで、レコードの読み書きをします。 PersonBenefitsClassはPersonClassから継承し、両方のテーブルのデータを提供できます。私はPersonBenefitsClassを介していずれかのテーブルにデータを書き戻すことができるようにしたいと思います。

(a)フィールドが親クラスと整列したままで、(b)両方のデータベーステーブルを更新できるように、SQLクエリ、プロバイダフラグ、およびコミットロジックを継承したクラスを作成する方法を開発した人は誰ですか?

見つからない参考資料はありますか?これは単なる悪い考えですか?私はDelphi 2007を使用しています。

+2

投稿を編集して「Say I」をすべて削除し、実際にやっているようなものを投稿しようとすると、実際に尋ねようとしていることを人々が理解できるかもしれない?本当に仲間のように、あまり雑音ではないものを投稿してください。そして、誰かが解決しようとしているような問題を手伝ってくれるかもしれません。言って、答えと同じように? –

+0

n層アプリケーションを作成しようとしていますか? 'TClientDataSet'コンポーネントの中に必要なすべての機能を持っている場合、なぜ追加のクラスを使う必要があるのですか?なぜあなたが説明したことをやろうとしているのかをさらに説明し、私たちはあなたに実行可能な答えを与えるかもしれません。 – LightBulb

答えて

1

ビジネスオブジェクトとデータベースのマッピングフレームワーク(ORM、Object-Relational Mapperとも呼ばれます)を開発する場合は、このような関係をつくるためのアーキテクチャの一部は適切に動作します。

PersonClassとBenefitsClassはどちらもBusinessObjectClassを継承します。 BusinessObjectClassは、データセットと対話する一般的なロジックを含む基本クラスです。それは、関係オブジェクトのリストを含むある種のリストオブジェクトを持っています。

各リレーションオブジェクトは、BusinessObjectClass子孫の1つまたはリストと、2つのテーブル間の外部キー関係を記述する余分なデータのいずれかを含む特殊なオブジェクトです。 BusinessObjectClassがクエリとその更新を行うとき、すべてのリレーションオブジェクトを反復処理し、必要に応じて独自のクエリと更新を行う必要があります。

コンストラクタのコンポジットオブジェクト(PersonWithBenefitsClass)にを継承し、を継承し、関連するBenefitsClassを記述するリレーションオブジェクトを設定します。参照整合性を保持するために、新しいオブジェクトの挿入が正しい順序で実行されていることを確認してください。

これは基本的な考えです。 (基本的なアイデアの1つですが、これを行う方法は他にもたくさんあります)私はあなたにそれをどのように実装するかの詳細を残します。

関連する問題