Шаблоны сложных объектов в Scala Play Framework

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

Например, скажем, следующие классы случаев построены из запроса к базе данных Slick.

case class ThemedListOfAlbums(
 themeName: String,
 description: String,
 albums: List[Album]
)
case class Album(
 name: String,
 artist: String,
 imageUrl: String
 songs: List[Song]
)
case class Song(
 name: String,
 imageUrl: String,
 description: String
)

тогда это так же просто, как передать сложный объект?:

@(user: User, catalogs: List[ThemedListOfAlbums])
 //stuff
<ul>
@for(c <- catalogs) {
 //?? want to render a partial for each catalog with a list of album images 
      //with song names on them
} 

Is there a limit to levels of nesting before I need to rethink what I am trying to render completely?

ссылка на пример была бы полезна, если это квалифицируется как вопрос «сделай домашнее задание». не могу найти подходящей информации


person Azeli    schedule 13.02.2016    source источник
comment
Я думаю, что совершенно нормально передавать список ThemedListOfAlbums и использовать их, когда вам нужно показать, что вы хотите.   -  person Łukasz    schedule 13.02.2016


Ответы (1)


Если ваш запрос Slick правильно заполняет ThemedListOfAlbums.albums и Album.songs, тогда я не понимаю, почему это не сработает.

Мне было бы более интересно увидеть типы запросов, которые вы используете, поскольку такой подход может очень быстро привести к большому количеству запросов к базе данных для одной страницы.

Например, один запрос может легко получить список Album для корневого объекта, но если каждый Album затем вызывает базу данных для списка связанных Songs, то у вас будет огромное количество запросов к базе данных, особенно с учетом вашего представления. содержит список ThemedListOfAlbums

person Ryuu    schedule 13.02.2016
comment
Это, безусловно, соображение, которое почти заставило меня подумать о денормализованном или nosql-решении и просто вернуть весь большой двоичный объект. Тем не менее, ThemedList является результатом системы пакетных рекомендаций (пользователь не выполняет поиск), которая заполняется в базе данных - у каждого пользователя будет только 5-10 возможных ThemedList в данный момент времени. Я также мог бы создать материализованное представление - person Azeli; 13.02.2016
comment
Представление, безусловно, является вариантом, который может уменьшить общее количество запросов, но это, скорее всего, вернет много повторяющихся данных. Единственное предложение, которое я могу дать, не разбираясь в вашем решении более подробно, состоит в том, чтобы, возможно, переосмыслить структуру вашей страницы, чтобы учесть это. Итак, вместо того, чтобы возвращать все song в каждый album, может быть, просто перечислить все album на одной странице, при этом каждая ссылка на другую страницу перечисляет их song. - person Ryuu; 13.02.2016