Modelar referències propietat
Algunes relacions de les teves dades són composicions: la cosa referenciada només té sentit en el context del seu pare i desapareix amb ell. Una comanda té línies; una enquesta té preguntes; una factura té files de desglossament d'impostos. Yellow ho modela amb referències propietat — una restricció de referència d'instància marcada amb Owned = true.
Aquest tutorial construeix una composició Order + OrderLine de cap a cap.
1. Els dos models
Crea dos models al teu esquema:
OrderLine — representa una línia d'una comanda.
product— Referència a una instància deProduct(referència normal; els productes existeixen independentment).quantity— Integer, obligatori.unitPrice— Decimal, obligatori.lineTotal— Decimal, virtual (quantity * unitPrice).
Order — el pare.
number— String, propietat principal.customer— Referència a una instància deCustomer.lines— Col·lecció de referències aOrderLine.total— Decimal, virtual (suma delines.lineTotal).createdOn— DateTime.
2. Marca la col·lecció de línies com a propietat
A Order.lines, afegeix una restricció de col·lecció amb:
Item type=INSTANCE_REFERENCETarget model=OrderLine
Després afegeix una restricció de referència d'instància a l'element de la col·lecció, amb:
Target model=OrderLineOwned= true
L'indicador Owned canvia com Yellow tracta la relació:
- En crear un
Orderamb instàncies noves d'OrderLine, les desa al mateix lot — les línies no existeixen abans del seu pare. - En editar la comanda pots afegir, treure o reordenar línies a la mateixa pantalla.
- En esborrar la comanda es fa soft-delete de totes les línies que posseeix. Esborrar una referència no propietat deixaria l'objecte intacte.
3. Comportament del formulari
Obre el model Order i crea una comanda nova. La col·lecció lines mostra un botó incrustat + Afegeix línia en lloc d'un desplegable — com que les línies són propietat, l'editor sap que les ha de crear in situ en lloc de triar-les d'entre les existents.
Afegir una línia obre el formulari d'OrderLine en línia. Omple-la, desa el pare, i tant la comanda com les seves línies es desen plegades.
4. Auditoria i historial
Les referències propietat consoliden la traça d'auditoria: veure l'historial d'una comanda mostra les línies que hi havia actives en aquell moment. Restaurar una versió anterior de la comanda en restaura també les línies.
Quan fer servir propietat vs referència normal
| Fes-la propietat quan… | Fes-la referència normal quan… |
|---|---|
| El fill no té sentit sense el pare (línies de comanda, files de desglossament). | L'objectiu existeix independentment (un client, un producte). |
| Esborrar el pare ha de treure el fill. | El mateix objectiu el reutilitzen molts pares. |
| L'usuari espera gestionar tots dos alhora a un sol formulari. | L'usuari tria l'objectiu d'una llista existent. |
5. Per contrast, una referència no propietat
Order.customer és una referència normal — els clients es comparteixen entre comandes. El formulari mostra un desplegable de clients existents. Esborrar una comanda deixa el client tranquil.
Les dues relacions estan al mateix model expressament: les comandes posseeixen les seves línies, però referencien els clients.
Relacionats
- Restriccions — la referència completa de la restricció de referència d'instància.
- Tipus de propietat — col·leccions, referències.
- Dissenyar un formulari — donar forma al formulari de comanda un cop existeixen aquests models.