2016-02-13 4 views
0

Je cherche à rendre des modèles et à passer des objets imbriqués. Je n'ai pas vu beaucoup d'exemples de cela. Il compile, mais je cherche plus d'idées sur la façon dont l'approche est idiomatique.Scala Play Framework structure des objets complexes

Par exemple, disons que les classes de cas suivants sont compilés à partir d'une requête de base de données 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 
) 

est-il alors aussi simple que passer l'objet complexe ?:

@(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 
} 

Y a-t-il une limite aux niveaux d'imbrication avant que je doive repenser ce que j'essaie de rendre complètement?

un lien vers un exemple serait utile si cela se qualifie comme une question «faites vos devoirs». cant semblent trouver toute information pertinente

+1

Je pense que c'est très bien de passer la liste de 'ThemedListOfAlbums', et de les utiliser, mais vous devez montrer ce que vous voulez. –

Répondre

0

fourni votre requête Slick et Album.songsThemedListOfAlbums.albums remplit alors je ne vois pas bien pourquoi cela ne fonctionnerait pas

Je serais plus intéressé de voir le genre de questions que vous » L'utilisation de ce type d'approche peut très rapidement conduire à une grande quantité de requêtes de base de données pour une seule page. Par exemple, une requête peut facilement obtenir une liste de Album pour l'objet racine, mais si appel de base de données pour une liste de connexes Songs alors vous allez avoir une énorme quantité de demandes de base de données, en particulier Etant donné que votre vue contient une liste de ThemedListOfAlbums

+0

C'est certainement une considération, et qui m'a presque amené à penser à une solution dénormalisée ou nosql et à retourner tout le blob. Cependant, le ThemedList est le résultat d'un système de recommandation par lots (l'utilisateur ne recherche pas) qui est rempli dans la base de données - chaque utilisateur n'aura que 5 à 10 ThemedLists possibles à un moment donné. Je pourrais également créer une vue matérialisée – Azeli

+0

Une vue est certainement une option qui pourrait réduire le nombre total de requêtes, mais cela rendrait probablement beaucoup de données en double. La seule suggestion que je peux faire, sans comprendre votre solution plus en détail, serait de repenser éventuellement la structure de votre page pour en tenir compte. Ainsi, au lieu de ramener toutes les «chansons» dans chaque «album», peut-être simplement lister chaque «album» sur une page, chaque lien vers une autre page listant leurs «chansons». – Ryuu