Grails: Где я могу обработать свойство класса домена, которое может иметь два разных представления? - PullRequest
0 голосов
/ 14 января 2019

Я программирую способ отображения продуктов, которые я получаю из базы данных MySQL на основе пользовательского ввода. Мои продукты имеют свойство (размер), которое может быть представлено строкой, объектом типа Size (другой класс домена, содержащий три значения с плавающей запятой) или может отсутствовать вообще. В настоящее время мой Product-Class имеет одно свойство для каждого представления, оба из которых могут иметь значение null. На мой взгляд, у меня есть одно конкретное место, где это свойство должно отображаться. Теперь мой вопрос: где мне решать проблему определения, какое представление у меня есть для конкретного объекта?

Я бы мог включить условие if в мой шаблон gsp, но это плохая практика. Я мог бы иметь службу, которая выполняет запрос, обрабатывает результаты и создает единственное свойство размера для передачи в шаблон, но это тоже не кажется правильным. Проблема в моем дизайне базы данных? Нужно ли менять модель домена?

Я прошу прощения за очень общий вопрос, я могу определенно изменить это, как только я знаю, где именно мне нужно что-то изменить. Большое спасибо уже!

1 Ответ

0 голосов
/ 14 января 2019

Один из способов решения вашей проблемы - использовать дополнительное поле transient , которое будет использоваться в ваших представлениях, но не будет сохраняться в вашей базе данных.

class Product {
    String sizeString
    Size sizeSize

    getSize() { sizeString ?: sizeSize.toString() }

    static transients = ['size']
}
...