Enumeracions
Una enumeració és una llista tancada de valors amb nom que reutilitzes arreu del sistema. Pensa en estats ("Esborrany", "Publicat", "Arxivat"), prioritats ("Baixa", "Normal", "Alta"), o qualsevol vocabulari curt que ha de tenir el mateix aspecte allà on aparegui.
Yellow modela les enumeracions de la mateixa manera que modela tot la resta: com a instàncies. Una Enumeration és una instància de Yellow normal, igual que cadascun dels seus EnumerationItem. Això et dona gratis tota la maquinària d'edició, versionat i referència — i fa que una enumeració es comporti com qualsevol altra dada del sistema.
El model Enumeration
Una Enumeration té tres propietats:
| Propietat | Tipus | Què fa |
|---|---|---|
Name |
String | Nom visible de l'enumeració. |
Items |
Col·lecció de referències a EnumerationItem |
Llista ordenada dels valors que pertanyen a aquesta enumeració. |
OrderItemsByName |
Boolean | Quan és cert, els items s'ordenen pel nom; altrament, per id. |
La col·lecció Items és la font de veritat de la pertinença. Els nous items es creen en línia des del diàleg de col·lecció i es desen al mateix batch que l'enumeració pare.
El model EnumerationItem
Un EnumerationItem té tres propietats:
| Propietat | Tipus | Què fa |
|---|---|---|
Name |
String | L'etiqueta que veu l'usuari. |
Description |
String | Descripció lliure. |
Id |
Integer | Identificador numèric estable dins de l'enumeració. |
L'Id només importa quan una propietat antiga encara espera un valor numèric (mira Propietat Integer lligada a una enumeració més avall). Per a propietats noves, tracta'l com una clau d'ordenació.
On apareixen les enumeracions a les restriccions
Hi ha tres formes de restricció que s'ancoren en una enumeració. Es diferencien en què es desa a la propietat quan l'usuari tria un item.
1. Propietat Integer lligada a una enumeració
Quan la propietat subjacent és un Integer, defineixes una restricció d'enter amb el camp Enumeration apuntant a l'enumeració. L'editor mostra un desplegable amb els items de l'enumeració, i el valor que es desa a la propietat és l'Id (un número) de l'item triat.
- Tipus de propietat:
Integer - Restricció: restricció d'enter amb
Enumeration = "Estat" - Què es desa: l'
Id(un número) de l'item triat
És la forma antiga. Funciona, però arrossega un parany subtil: la propietat per defecte val 0, i si 0 és un Id vàlid de l'enumeració, el desplegable sembla seleccionat encara que ningú hagi triat res. La majoria de vegades val més fer servir la forma següent.
2. Propietat Instance Reference lligada a una enumeració
Quan la propietat subjacent és una Instance Reference, defineixes una restricció de referència a instància amb dos camps:
Target Model = EnumerationItemEnumeration = "Estat"
L'editor mostra el mateix desplegable, però el valor desat és una referència a l'EnumerationItem triat. "Res triat" i "una selecció real" ja són inequívocs.
- Tipus de propietat:
Instance Reference - Restricció: restricció de referència a instància amb
Target Model = EnumerationItemiEnumeration = "Estat" - Què es desa: una referència a l'
EnumerationItemtriat
És la forma recomanada per a propietats noves.
3. Col·lecció d'items tipats via una enumeració
A una restricció de col·lecció, el camp Item Type és en si mateix una referència a un item de l'enumeració integrada Property Types. Triar "STRING" vol dir "cada entrada de la col·lecció ha de ser un string"; triar "INSTANCE_REFERENCE" vol dir "cada entrada ha d'apuntar a una instància" i llavors també defineixes Target Model. És el mateix patró que abans, aplicat recursivament a la restricció que defineix la pròpia col·lecció.
Enumeracions integrades
Yellow ve amb un petit conjunt d'enumeracions de sistema. La que trobaràs més sovint és Property Types — llista tots els tipus de propietat que Yellow suporta (String, Integer, Boolean, Float, Decimal, DateTime, Date, Model Reference, Model Property Reference, Instance Reference, Instance Property Reference, Collection). És el que alimenta el selector de tipus a l'editor de restriccions de col·lecció.
Evolució: enter → item d'enumeració → model personalitzat
Les propietats tendeixen a créixer. Un camp que comença com una marca numèrica sovint passa a ser una enumeració, i una enumeració sovint acaba sent un model complet quan els items necessiten camps més rics (una categoria deixa de ser només una etiqueta — també té una icona, una categoria pare, un slug, etc.). Les formes de restricció anteriors estan dissenyades perquè aquests salts siguin barats.
D'Integer a EnumerationItem
Tens una propietat Integer lligada a una enumeració. La vols evolucionar perquè el valor porti la identitat completa de l'item triat (i deixar enrere el parany del 0 per defecte).
- Canvia el tipus de la propietat de
IntegeraInstance Reference. - Substitueix la restricció d'enter per una restricció de referència a instància sobre la mateixa propietat, amb
Target Model = EnumerationItemi la mateixaEnumeration. - Migra les dades existents: per a cada valor enter desat, busca l'
EnumerationItemque li correspon i substitueix l'enter per una referència a aquest item.
El desplegable continua veient-se igual des de la perspectiva de l'usuari.
D'EnumerationItem a un model personalitzat
Imagina que la teva enumeració s'ha quedat curta. "Estat" abans era només un nom; ara necessites guardar una icona, un color, una posició en un workflow i uns quants permisos. És hora de promocionar-ho a un model dedicat — diguem-ne Status.
Aquest salt és gairebé gratis perquè el tipus subjacent de la propietat no canvia — continua sent una Instance Reference:
- Defineix el nou model (
Status) i copia cadaEnumerationItema una instància deStatus. Preservar l'identificador de cada item fa que la migració sigui zero-touch. - Actualitza la restricció: mantén la restricció de referència a instància sobre la propietat, deixa de banda el camp
Enumeration, i canviaTarget Modeld'EnumerationItemaStatus.
Les dades existents ja guarden una referència — només ha canviat la forma del destí. Si has conservat els mateixos identificadors, les referències existents segueixen sent vàlides; si n'has fet servir de nous, fes una passada one-shot per remapejar-les.
Aquest és el guany de construir tota enumeració sobre referències: una enumeració és el model personalitzat més senzill possible. Quan se't queda petita, promociones sense reescriure com es desa la propietat.
Com editar enumeracions
Les enumeracions viuen a l'Explorador com qualsevol altra instància. Obre el model Enumeration, escull o crea una enumeració, i edita la seva col·lecció Items — els nous items es creen en línia (el formulari d'EnumerationItem s'integra directament al diàleg de la col·lecció) i es desen al mateix batch que l'enumeració pare. Reordena ajustant l'Id de cada item, o activa OrderItemsByName per ordenar per etiqueta.