Наилучшая практика - Получение доменного объекта в Grails с помощью статического поля? - PullRequest
0 голосов
/ 11 декабря 2010

Таким образом, у нас есть уникальные «коды» для некоторых из наших объектов grails (ссылки на данные), и когда мы хотим получить их, мы делаем это, вызывая их со статическим кодом:

Currency.findByCode(Currency.DOLLAR)

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

Есть ли более приемлемый подход (может быть, где-то есть ссылка на сам объект)?Если это лучший способ сделать это, это приемлемый ответ.Спасибо.

Ответы [ 2 ]

3 голосов
/ 11 декабря 2010

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

Если вы делаете статический импорт CurrencyType (возможно, перечисление, содержащее различные типы валюты, которые вы определили) в верхней части вашего класса:

static import com.example.CurrencyType.*

Внизу в вашем коде вы небольше не нужно ставить префикс перед всеми ссылками CurrencyType, вы можете просто сделать:

Currency.findByCode(DOLLAR)

Если они не нуждаются в изменении, вы также можете добавить вспомогательный метод в ваш класс Currency, чтобы получить его:

Currency.groovy:
static import com.example.CurrencyType.*
...
static transients = ['dollar']
...
static Currency getDollar() {
    Currency.findByCode(DOLLAR)
}

Это позволит вам использовать Currency.dollar в другом коде.В этих классах вы также можете использовать статический импорт, чтобы просто сослаться на dollar:

static import com.example.Currency.*
....
println dollar // gets the dollar from the db and prints it out
2 голосов
/ 11 декабря 2010

Это зависит.Это похоже на справочные данные.Если эталонные данные никогда не изменятся, я бы вообще не использовал слой постоянства - я бы закодировал набор статических переменных, которые являются статическими эталонными данными.изменить ваши справочные данные без повторного развертывания, наиболее практичным способом будет загрузить их из базы данных.У вас будет какой-то тип экрана администратора, где вы можете манипулировать данными.Вы бы использовали кэш 2-го уровня, например, ehcache, чтобы ограничить, насколько уровень персистентности на самом деле достигает БД - таким образом вы можете получить действительно хорошую производительность.См. Раздел 5.5.2.2 руководства пользователя.

Однако при вашем текущем подходе вам придется повторно развернуть изменение ваших справочных данных, поскольку необходимо кодировать Currency.DOLLAR. Вероятно, это будетприятно не делать этого.

...