0

データベース内の 1 つのテーブルで表される Person、Campaign、Event などの基本的なドメイン オブジェクトがあります。ただし、PersonCampaign や PersonEvent、さらには基本オブジェクトの 1 つを理論的に拡張できる CampaignEvent など、これらのオブジェクトのより複雑なバージョンもあります。

ただし、PHP は多重継承をサポートしていないため (たとえば、PersonEvent は Person または Event を拡張します)、これは複雑になります。また、一部のドメイン オブジェクトは、実際にはさまざまなプロパティと機能を持つファクトリ オブジェクトです (たとえば、Event は実際には、電子メール、通話、FAX などのイベントの種類によってサブクラス化されます)。

私が見ることができる最も簡単な解決策は、データ アクセス層から返されるデータに基づいて、オブジェクトの実際の性質を変更することです。

これを処理するためのより良い方法について何か提案はありますか? それとも、データ アクセス レイヤーから現在利用できるものに基づいて、プロパティと動作を変更できる統合ドメイン オブジェクトを作成するのが正しいのでしょうか?

4

3 に答える 3

2

解決策は、他のオブジェクトをカプセル化することです。

PersonEvent クラスには、Person と Event が含まれています。

関数 $PersonEvent->get_event() またはプロパティ $PersonEvent->Event のいずれかでアクセスできます。

于 2009-02-01T16:34:57.920 に答える
1

OOP の観点からは、PersonEvent は実際にはオブジェクトではなく、関係です。

Person クラスは次のような関数を取得できます。

get_events()
add_event($Event)
remove_event($Event)

および Event クラス

get_person()
set_person($Person)
unset_person() // set person_id to NULL

(人と事象が1:Nの関係だと仮定)

悪い点は、これによりデータマッパーが複雑になるか、データマッパーをまったく使用しないことです。

于 2009-02-01T16:54:04.620 に答える
0

次のような設定はどうでしょうか。

テーブル: Person 、Sales Person、Customer Person など。 person テーブルには、すべてのサブタイプの個人に関する一般的な情報が格納されます。次に、person テーブルに FK された他のテーブルがあります。そのサブタイプに関する追加の一意の情報を保存します。

あなたのオブジェクトは、拡張するか、一般的な「人」オブジェクトを呼び出してプライマリ データにアクセスし、それを一意の型オブジェクトに呼び出して、そのサブタイプの一意のデータにアクセスしますか?

于 2009-01-28T17:55:34.660 に答える