Схема ORM / плагин для трансляции классов домена - PullRequest
0 голосов
/ 19 июня 2011

Моя проблема просто в Grails: я хочу плагин ИЛИ пример для переводов Доменных Классов.

Описание: Я хотел бы иметь переводимые энтиты с хорошей схемой БД. Например

Класс домена 1 : книга (id, идентификатор_пользователя, число_страниц)

Переводы для книги : (book_id, язык, название, описание)

Класс домена 2 : Автор (id, день рождения)

Переводы для автора (author_id, language, first_name, last_name) (например, один и тот же автор известен под разными именами в разных странах)

Что я хочу сделать: зная язык, я хочу получить книгу с ID и EAGER, выбирая ее автора (конечно, книгу и автора с правильными переводами). Или, например, для поиска во всех книгах автора, известного по имени в стране / языке.

Как бы вы сделали это вручную с GORM?

Есть ли плагин для этого или что-то, что скрывает "бизнес-логику"?

Или как я могу просто получить все переводы для книги?

Ответы [ 2 ]

0 голосов
/ 20 июня 2011

Только что наткнулся на этот плагин , похоже, это может быть то, что вы ищете.

0 голосов
/ 20 июня 2011

Об использовании GORM как есть, т. Е. Book и BookTranslations были бы двумя объектами домена с переводом один-ко-многим между Book и BookTranslations, и тогда вы могли бы выполнять BookTranslations.findAllByBook, запросы критериев и т. Д.

Причина, по которой я предлагаю это, заключается в том, что в вашем описании есть отношение сущности (то есть один ко многим), поэтому не похоже, чтобы иерархия класса родительских / дочерних / встроенных стилей что-то сделала для вас. Это также дает вам полный контроль над стратегией извлечения [1]

Я думаю, что единственным «секретным соусом» здесь является то, что вы могли бы стандартизировать способ представления языков. Например, если у вас действительно есть какой-то текст в кодировке Юникод в этих строках или сопоставлениях со стандартными файлами сообщений, вы можете использовать стандартные имена языков ISO для языкового столбца в таблице BookTranslation (например, en-US для американского английского). Это позволило бы вам воспользоваться прямыми возможностями Grails internationalizatino, в которых можно автоматически разрешать локали и файлы сообщений, а также есть теги и другие полезные свойства, которые делают интернационализацию менее болезненной.

См. [2]

Простым примером будет что-то вроде следующего (не проверено, поэтому извините за ошибки компиляции):

class Book {
    String author
    int numPages
    static hasMany [ bookTranslations: BookTranslations]
}

class BookTranslations { 
    String language
    String title
    String description
    static belongsTo = Book
}

def book = new Book(author:"test", numPages:20)
book.save()
def translation1 = new BookTranslations(language:"en-us", title:"How to Book", description:"A wonderful book")
book.addToBookTranslations(translation1)
def translation2 = new BookTranslations(language:"en-us", title:"Second How to Book", description:"A glorious book")
book.addToBookTranslations(translation2)

def results = BookTranslations.findAllByBook(book)
// or ..
results = book.bookTranslations

Как повезет, пример в главе GORM в документации Grails посвящен авторам и книгам. Смотри [3]

[1] http://grails.org/doc/latest/guide/5.%20Object%20Relational%20Mapping%20%28GORM%29.html#5.5.2.8%20Eager%20and%20Lazy%20Fetching

[2] http://grails.org/doc/latest/guide/10.%20Internationalization.html

[3] http://grails.org/doc/latest/guide/5.%20Object%20Relational%20Mapping%20%28GORM%29.html

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