С базами данных NoSQL (такими как GAE Datastore) вы должны думать с точки зрения модели доступа к данным, а не модели хранения данных.Т.е. вы должны думать о том, как вы будете получать доступ к данным и как вы будете организовывать данные так, чтобы доступ был наиболее эффективным (= быстрее и дешевле).
К сожалению, это часто идет вразрез с принципами ООП и «схемой» хранилища данных (тамРазве это не схема хранилища данных, вы понимаете, что не так?) не вписывается в парадигму ООП Java.
Одним из способов достижения этой цели является де-нормализация данных, что означает, что вы записываете данные (в максимально возможной степени) в одну большую запись, что также означает, что данные являются избыточными.
Теперь, поскольку вы не можете поместить все данные в одну запись, вам нужно сделать несколько уступок.Для этого вы должны решить:
- Какие данные будут читаться чаще всего?
- Какие данные будут изменены больше всего?
Из вашей модели I 'Я предполагаю, что Товар и Продавец не сильно изменятся, но Предложение будет часто создаваться, верно?Постарайтесь спроектировать так, чтобы минимизировать количество операций чтения / записи - начните с данных, которые используются чаще всего, и организуйте схему так, чтобы вы получали / помещали большую часть данных с минимальным количеством операций чтения / записи.
Попытка ответить на ваш вопросвопросы:
Просто создайте свой уровень обслуживания, где вы выполняете основные функции CRUD (добавление / обновление / удаление / поиск продавца / продукта / и т. д.) и бизнес-функции более высокого уровня (создание предложения дляПродавец с продуктами и т.д ..).DAO - это PITA, поэтому вы должны как можно больше работать с POJO - используйте Objectify.В этом случае вы можете покончить с шаблоном Адаптера.
Если под ссылками вы подразумевали идентификаторы (long, Long или String), то вам следует использовать ключи: ключи - это комбинация родительских ключей., вид и удостоверение личности.Ключи гарантированно будут уникальными, а идентификаторы - нет (они уникальны, только если вы не используете группы сущностей).Кроме того, с помощью objectify ключи являются типобезопасными, а идентификаторы - нет.
Как описано в 1., многоуровневый подход - это путь.Однако старайтесь избегать DAO - они требуют много ручной работы и, как таковые, являются источником ошибок.