Nyanser i UML-modeller: härledda värden = attribut?

Mina gästbloggar i mars resp maj gick in på nyanser av koppling mellan klasser (på gränsen till avancerad UML), som resulterar i länk mellan objekt (pekare, referens, främmande nyckel, nästlat objekt mm).

Vid första anblick tycks hanteringen av härledda värden (jfr. kurs T2715 Agil modellering med UML) vara en hårfin nyans i jämförelse, men för arkitekten kan den bli en liten tuva som stjälper ett BigData-lass. Skall man göra härledda värden till attribut - eller hellre till utparametrar från de beräkningsoperationer som härleder dem? Det korta svaret är ”beror på”, men den som sysslat med dataintensiva system länge anar redan på vad:

- Hög andel frågor (eller gott om billigt minne/cache) talar för separat attribut, och i CQRS även separat klass, komponent, eller system för frågehantering.
- Hög andel uppdateringar (eller gott om billig processorkapacitet) talar för beräkning även för att besvara frågor - där frågorna är tillräckligt sällsynta kan man leva med en tillfälligt längre processorkö (enda sedan nätverksdatabaser har det funnits specialvarianter av datatyp för detta, Codasyl-standarden som var ”preSQL” snarare än noSQL erbjöd typen ”result of procedure XY” ). Med andra ord är de två viktigaste nyckeltalen som styr beslutet:

1. marginalkostnad för processorkapacitet i relation till dito för minne
2. förväntad andel frågor (CQRS-Q:et) i relation till förväntad andel uppdateringar (C:et).

Och skillnaden mellan attribut och utparameter i UML? Även här är svaret ”beror på...”

Anta som ett exempel att Produkt i vårt system har ett tillverkningsdatum och en ålder (ålder= maskindatum och tid minus tillverkningsdatum och tid). Tillverkningsdatum uppdateras aldrig i normalfallet, och blir ett attribut, men ålder ”beror på”: om den mäts i t ex månader så blir andelen uppdateringar mycket låg, vilket talar även för ålder som attribut:


Bild 1 – ålder som attribut.

Om åldern däremot mäts i driftssekunder, av ett litet chip ombord med begränsad kapacitet, och läses sällan, t ex av serviceutrustning i hangaren/depån, så lutar det åt en utparameter i stället. Då går det att låta ett annat system på en server beräkna åldern (t ex ur start- och stopptider i loggfiler) den gången något anrop verkligen frågar efter den. Det vanliga sättet att visa utparameter i UML är efter ett kolon:


Bild 2 – utparameter (vanligast).

Men det finns ett mindre vanligt sätt också. Ett snedstreck visar att värdet är just härlett dvs inte lagrat som vanliga attribut:


Bild 3 – implicit utparameter (härlett värde).

I agil modellering låter vi mottagarens informationsbehov styra. Om ritningen vänder sig primärt till kravställare eller analytiker, är det enklast för alla att vara konsekvent med inkapslingen och dölja även (den i deras ögon hårfina) skillnaden mellan ”vanliga” attribut och härledda. Däremot om arkitektrollerna är involverade (DBA, SA/SWA, produktarkitekt, osv) blir skillnaden mycket viktigare då den inverkar på tradeoffs mellan olika kvalitetskrav (NFR).  

konsult, Kiseldalen.com
UML 2 Professional, OCUP Advanced Level (certifikatnivå 3 av 3)


Milan samarbetar med Informator sedan våren 1996 inom modellering, UML, arkitektur, krav, analys och design. Håller f.n. kurser i Arkitektur, i modellering (T2715, T2716), och  2013 höll han också Informators fullsatta Frukostseminarium om användningsfall.

Inga kommentarer:

Skicka en kommentar

Trevligt att du vill dela med dig av dina åsikter! Tänk på att hålla på "Netiketten" och använda vårdat språk.