Платформа ORM, расширяющая базовый класс реализацией базы данных - PullRequest
1 голос
/ 25 мая 2010

У меня есть игра, состоящая из клиента / сервера + веб-страница. Центральным понятием в клиенте и игровом / веб-сервере является Account. Учетные записи хранятся в базе данных, поэтому я нуждаюсь в некотором ORM и недавно взглянул на Hibernate и Cayenne.

Однако я понимаю, что обе платформы предоставляют "DatabaseBackedAccount" -класс, который я расширяю другими моими Account методами. Моя проблема в том, что класс Account многократно используется на клиентской стороне, и я, очевидно, не хотел бы включать код, связанный с базой данных, в реализацию клиента.

Мое текущее решение состоит в том, чтобы иметь класс Account (общий для сервера и клиента) и расширять его с помощью DatabaseBackedAccount (переопределяя setter-методы и предоставляя метод commit) на стороне сервера. Я нахожу это вполне естественным и приятным, однако мне пришлось реализовать все gory sql-details и ORM самостоятельно.

Есть ли способ «перевернуть таблицу» в любой существующей структуре ORM, чтобы сгенерированные классы расширяли мой существующий класс?

1 Ответ

2 голосов
/ 25 мая 2010

В JPA (и в hibernate, но я знаю JPA лучше), внутри классов сущностей нет магии, они просто POJO с аннотациями (или настроены через xml). Таким образом, вы можете успешно использовать их на стороне клиента без каких-либо последствий на стороне сервера, поскольку вся магия происходит извне через интерфейс EntityManager.

И на более общем замечании: учетная запись не должна иметь возможность фиксировать себя (так же, как ей нельзя разрешать создавать или удалять себя), должна быть служба или DAO, которая делает это извне, создавая красивые и чистые POJO, которые вы можете использовать как на стороне клиента, так и на стороне сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...