1

これは、最善の解決策を見つけるのに苦労し続けているものです。PHP と Java を使用しているときにこの問題が発生したので、OOP の問題の基本的な理解です。例は PHP です。

ここにいくつかのオブジェクトがあるとしましょう。曲、アーティスト、アーティスト プロフィール、ユーザー。

そのため、アーティスト (アーティストのプロフィール ページなど) を呼び出すときに、ArtistProfile とユーザー オブジェクト (サブスクライバー) の配列が必要な場合もあれば、曲のページを表示するときなど、アーティスト情報のみが必要な場合もあります。

あるオブジェクトを別のオブジェクトの一部としてネストする必要がありますか、それともさまざまな用途に合わせてより具体的なオブジェクトを作成する必要がありますか。

オプション 1: ネスト

Class Song {
   private $songId;
   private $songName;
   private $year;
   private $Artist; //Artist object
}

Class Artist {
   private $artistId;
   private $name;
   private $age;
   private $subscriberArr; //Array of User objects which then have more nested objects such as a Role object, Profile object
   private $profile; //Profile object which could also have more nested objects
}

Class User {
   private $userId;
   private $name;
   private $age;
   private $role; //Role object
   private $profile; //UserProfile object
}

オプション 2: より多くのオブジェクトを構築する

Class Song {
   private $songId;
   private $songName;
   private $year;
   private $artistId;
}

Class Artist {
   private $artistId;
   private $age;
   private $name;
}

Class User {
   private $userId;
   private $name;
   private $age;
   private $roleId;
}

Class SongWithArtist {
   private $song; //Basic Song object
   private $artist; //Basic Artist object
}

Class ArtistWithProfile {
   private $artist; //Basic artist object
   private $profile; //Profile object
   private $subscriberArr; //UserDisplay object containing basic User object
}

 Class UserWithProfile {}

オプション 1 は、そのページには必要ないかもしれないが管理しやすい情報を取得するために多くの時間/リソースを浪費することを意味します。オプション 2 は厄介で、どのオブジェクトが何であるかを追跡する必要がありますが、db 呼び出しははるかに少なく、高速です。「正しい」選択肢はどれですか、および/または 3 つ目の正しい選択肢はありますか?

4

1 に答える 1

0

2つのこと:

  1. 継承と構成のどちらを決定するかについては、昔ながらの「is a」vs.「has a」ルールに固執してください。

  2. クエリの最適化について心配する必要はありません (特にオブジェクト設計の根本的な変更を伴う場合)。ただし、特定のパフォーマンス要件が満たされていない判断し、アプリケーションのプロファイルを作成して、ボトルネックがどこにあるかを判断した場合を除きます。 . 「OOP」は、情報を整理して表現する概念的な方法です。オブジェクトを設計して、意図と情報を正確かつ正確に表現します。時期尚早に最適化しないでください。いずれにせよ、適切な ORM (特に、Java を使用した Hibernate などの遅延ロードをサポートするもの) と適切に設計され、適切に正規化されたデータベース (多くの場合、最初にビジネス オブジェクトを設計することから自然に生じる) は、ほとんどの健全な設計アプローチで一般的にうまく機能します。 .

于 2013-11-15T07:43:37.230 に答える