Google AppEngine (Java) の複雑なクラス階層
-
11-09-2019 - |
質問
エンティティ (JDO) に対して Java (GAE/J) を使用した Google AppEngine で同じクラスを継承/拡張する複数のクラスを持つことは可能ですか。たとえば、次のようなものがあります。
- コンテンツ (抽象クラス)
- コース
私のコースには次のものがあります:
- コンテンツを拡張するビデオのリスト
- 本のリスト
同時に
- 動画にはタグのリストがあります
- 本にはタグのリストがあります
- コースにはタグのリストがあります
GAEでもできるでしょうか?
私もこれと似たようなことをしていますが、非常に多くの問題があります。この種の例はありますか?
解決
新しい質問のタイトルに基づいて更新します
あなたの難しさはまだわかりませんが、試してみます
あなたの質問は
Google Appengineで同じクラスを継承/拡張する複数のクラスが私のエンティティにJava(GAE/J)を使用することは可能ですか?
答えは「はい」です。あなたの質問には実行できないことは何もありません。どのような問題がありますか?
私はこれに似ていますが、非常に多くの問題があります。この種の例はありますか?あなたが投稿した説明には何の問題も見当たらないので、正確にどのようにやっていますか。
それを助けるために、これを実行できる方法の 1 つを紹介します。
interface Tagable {
public doSomeThingWithTagList();
}
class abstract Content implements Tagable {
List<Tag> tagList;
}
class Video extend Content implements Tagable {
}
class Book Tagable{
List<Tag> tagList;
}
class Course Tagable {
List<Video> videoList;
List<Books> bookList;
List<Tag> tagList
}
他のヒント
あなたが言及したことに基づいて、ここで暗闇の中でショットを撮ります。
- タグリストを管理方法とともにコンテンツに追加します
- ビデオ、書籍、コースはすべてコンテンツを拡張できます (これが設計上意味があるかどうかはわかりません)
- コースにはビデオと書籍のリストを含めることができます。
- すべてにタグのリストが含まれます
先ほども述べたように、これは設計において論理的に意味をなさない可能性がありますが、詳しい情報がなければ判断できません。
あなたが言及クラス関係のほとんどは合成ではなく、継承のインスタンスである必要がありそうです。あなたはJavaで複数の実装継承を行うことはできませんが、複数のインタフェースを実装することができます。組成物は、これらの制限を持っていないとオブジェクトが異なる(複数の)クラスの他のオブジェクト(組成物)への参照を含めることができます。