Vue de classe (model)
Sommaire |
Introduction
Les vues de classe sont l'équivalent objet des vues SQL.
Une vue de classe présente les caractéristiques suivantes :
- Elle représente une vue d'une classe existante, généralement persistante, appelée classe principale.
- Les attributs d'une vue puvent être soit des attributs non persistants soit des alias sur les attributs de la classe principale.
- Les alias d'attribut peuvent parcourir les références de la classe principale.
Le principal avantage des vues est que lors du chargement des objets d'une vue le framework effectuera une seule requête contenant les jointures sur toutes les tables nécessaires selon les références définies dans les alias de la vue.
Filtre sur les vues
Les filtres posés sur une vue doivent être définis par rapport aux attributs de la vue mais peuvent contenir des termes relatifs à la classe principale de la vue.
Un filtre sur une vue peut faire référence à la pseudo référence "main" pour forcer l'utilisation d'un attribut de la classe principale, ceci peut être utile si la vue redéfinit un rôle de la classe principale et que l'on désire utiliser le rôle dans le filtre.
Droit sur une vue
Les droits pris en compte pour une vue sont :
- Les droits posés sur la vue.
- Si la vue n'a pas de droits définis les droits définis sur la classe principale.
Propriétés avancées d'une vue
- Clé primaire
- Lorsqu'une vue comporte des agrégats, chaque objet de la vue correspond à un ensemble d'objets de la classe principale; dans ce cas il est nécessaire de définir un attribut clé primaire pour identifier de façon unique une instance de la vue.
- Eliminer les doublons
- Cette option permet d'inclure un DISTINCT dans la clause SELECT de sorte que seules les lignes de combinaisons uniques des colonnes soient retournées. Dans ce cas il est nécessaire de définir une clé primaire car les identifiants des lignes correspondantes ne sont pas retournés.
- Ordre de tri
- Cet attribut peut être utilisé pour ordonner les instances de la vue.
- Expression Where
- Ce filtre, appliqué uniquement en SQL, peut être utilisé pour filtrer les instances de la vue. Il est ajouté systématiquement à toutes les requêtes portant sur la vue.
Rôle sur une interface
Lorsque l'attribut de la vue est un alias d'un attribut d'une référence définie par une interface, il est nécessaire de définir quelle classe support de l'interface doit être utilisée par la vue. Ceci ce fait en qualifiant le rôle sur l'interface par le nom de la classe support.
Attributs agrégats
Lorsque l'attribut de la vue est un alias d'attribut numérique il est possible de définir un agrégat pour cet attribut.
Attributs agrégats de différence
Certaines fonctions d'agrégats opèrent sur une différence d'attribut, dans ce cas vous devez spécifier un second alias :
Agrégats d'attribut de rôle liste
Les fonctions d'agrégat peuvent être utilisées sur les attributs d'un rôle liste.
Par exemple, si vous avez une relation maître / détail défini par un rôle liste vous pouvez faire une vue du maître qui retourne des valeurs agrégées des détails.
Dans cet exemple :
la vue expose un attribut qui est la différence des montants des objets détails, le code SQL généré par cette vue est :
select TOP 100 t0.uneChaine "code",sum(t1.montant-t1.montant2) "montant",t0.oid "oid",t0.idOTP "idOTP",t0.UpdStamp "UpdStamp",t0.UpdDate "UpdDate",t0.UpdUser "UpdUser",t0.oid "oid" from dbo.WFCLASSEX t0 left outer join dbo.WFCLASSEXX t1 on t1.oidWFClasseXRef=t0.oid group by t0.uneChaine,t0.oid,t0.idOTP,t0.UpdStamp,t0.UpdDate,t0.UpdUser,t0.oid order by t0.uneChaine, t0.oid
Attributs de type date
Lorsque l'attribut de la vue est un alias d'attribut date/heure il est possible de définir un opérateur pour cette date de sorte d'obtenir une partie de la date.
Vue sur une interface
Il est possible de définir une vue sur une interface, dans ce cas vous devez préciser quelles classes concrètes seront utilisées dans la vue.
La vue réalise alors un union de toutes les classes concrètes.
Dans cet exemple la vue réalise un union des deux classes SupportInterface1 et SupportInterface2, la requête générée est celle-ci:
select TOP 100 t0.unCode "unCode",t0.oid "oid",t0.idOTP "idOTP",t0.UpdStamp "UpdStamp",t0.UpdDate "UpdDate",t0.UpdUser "UpdUser",t0.oid "oid" from dbo.SUPPORTINTERFACE1 t0 UNION select TOP 100 t0.unCode "unCode",t0.oid "oid",t0.idOTP "idOTP",t0.UpdStamp "UpdStamp",t0.UpdDate "UpdDate",t0.UpdUser "UpdUser",t0.oid "oid" from dbo.SUPPORTINTERFACE2 t0 order by t0.UpdDate desc, t0.oid desc
— Modèle — Développement DSM —