Сложная иерархия классов в Google AppEngine (Java) - PullRequest
2 голосов
/ 09 июля 2009

Возможно ли иметь несколько классов, которые наследуют / расширяют один и тот же класс в Google AppEngine с Java (GAE / J) для моих сущностей (JDO). Например, у меня есть:

  • Содержание (Абстрактный класс)
  • Курс

и тогда мой курс будет иметь:

  • список видео, которое расширяет контент
  • список книг

В то же время

  • Видео содержит список тегов
  • Книга содержит список тегов
  • У курса есть список тегов

Возможно ли это сделать GAE?

Я делаю подобное, но у меня так много проблем. Есть ли примеры такого рода вещей?

Ответы [ 3 ]

2 голосов
/ 09 июля 2009

Я сделаю снимок в темноте, основываясь на том, что вы упомянули:

  • Поместите список тегов в Content вместе с методами управления
  • Видео, книги и курсы могут расширять контент (не уверен, имеет ли это смысл в дизайне)
  • Курс может содержать список видео и книг.
  • У всех будет список тегов

Как я уже говорил, это может не иметь логического смысла в вашем дизайне, но без дополнительной информации я не могу сказать.

1 голос
/ 09 июля 2009

Кажется, что большинство упомянутых вами классовых отношений должны быть примерами композиции, а не наследования. Вы не можете сделать множественное наследование реализации в Java, но вы можете реализовать несколько интерфейсов. Композиция не имеет этих ограничений, и объект может содержать ссылки на другие объекты (композиции) разных (множественных) классов.

1 голос
/ 09 июля 2009

Обновление на основе нового названия вопроса

Я до сих пор не понимаю, в чем ваша сложность, но я сделаю попытку

Ваш вопрос

Возможно ли иметь несколько классы, которые наследуют / расширяют одно и то же класс в Google AppEngine с Java (GAE / J) для моих лиц

Ответ - да, почему нет? Я не вижу в вашем вопросе ничего, что нельзя сделать. Какая у вас проблема?

Я делаю то же самое, но столько проблем. Есть ли примеры такого рода вещей? Как вы это делаете, потому что я не вижу ничего плохого в описании, которое вы опубликовали.

и просто чтобы помочь вам, вот один из способов, которым это можно сделать,

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 
} 
...