Eine Mixin-Standardstruktur wird für jede Komponente im Modell verwendet. Jede Komponente wird in drei primäre Mixins unterteilt: das Mixin UI, das Mixin Rules und das Mixin Graphics. Auf diese Weise kann die Geschäftslogik (Mixin Rules) von der Benutzeroberfläche (Mixin UI) und den Grafiken (Mixin Graphics) getrennt werden. Die Reihenfolge der Mixins ist in diesem Fall wichtig, da das Mixin UI typischerweise einige im Mixin Rules angegebene Vorgabewerte überschreibt. Die Designs für Tisch (Table), Tischplatte (TableTop) und Beine (Leg) \ sind wie folgt definiert:
Design Table : TableDesigns TableUI TableRules TableGraphics Design TableTop : TableTopDesigns TableTopUI TableTopRules TableTopGraphics Design Leg : LegDesigns LegUI LegRules LegGraphics
Die Mixins TableDesigns, TableTopDesigns und LegDesigns sind einfach organisatorischer Natur. Sie enthalten keine wirklichen Regeln. Die Unterteilung von Designs in die oben genannten Strukturen ist eine sinnvolle Intent-Programmierungspraxis. Die Verwendung der dargestellten Strukturen ermöglicht nicht nur den Einsatz der in Intent verfügbaren leistungsfähigen Mehrfachübernahme-Funktion, sondern bietet dem Benutzer zudem eine strukturierte Methode zur einfacheren Implementierung der Objektzusammensetzung in der Design architektur.
Normalerweise ist der Vorgabewert einer Regel einfach der Wert der Regel selbst, und jeder geänderte Wert wird in einem dynamischen Wert für diese Regel gespeichert. Allerdings werden die UI-Eigenschaften in den UI-Werkzeugen durch getrennte UIProperty-Teile im Intent-Modell gesteuert, die als "Vermittler" zwischen den Vorgabewerten und den vom Intent-Modell verwendeten tatsächlichen Werten fungieren. Dies erfolgt, damit die gesamte UI-Logik der Eigenschaft (Wert, Auswahlmöglichkeiten usw.) im Design UIProperty eingeschlossen werden kann. Der tatsächliche dynamische Wert wird im UIProperty-Bauteil statt in der Geschäfts regel gespeichert, und die Geschäfts regel verweist einfach auf die Regel mit dem UIProperty-Wert. Der Entwickler kann einfach einen Wert an den Parameter DefaultValue eines UIProperty-Bauteils übergeben.
Es gibt zudem eine Schnellmethode zum Definieren des Vorgabewerts einer Regel. Bei dieser Schnellmethode erhalten Regeln mit Vorgabewerten das Präfix "dv" und ihre zugehörigen UIProperty-Bauteile das Präfix "ui". Beispielsweise gibt es im Tisch design eine Regel Length, und deren Vorgabewert ist in der Regel dvLength gespeichert. Wenn dem Tisch eine untergeordnete UIProperty namens uiLength hinzugefügt wird, verwendet die Eigenschaft uiLength den Wert der Regel dvLength als Wert für ihre Regel DefaultValue. Eine Einschränkung dieser Schnellmethode ist, dass die UI-Eigenschaften von BasicUIProperty abgeleitet sein müssen, einer Erweiterung des UIProperty-Designs.
Typischerweise enthält das Mixin Rules die Definition der Vorgabewerte. Die Geschäftslogik-Regeln, die diese Vorgabewerte verwenden, werden durch das Mixin Rules einfach nur durchgeleitet. Im vorherigen Beispiel gibt Length einfach den Wert von dvLength im Mixin Rules zurück.
Parameter Rule dvLength As Number = 60.0 Rule Length As Number = dvLength
Im Mixin UI jedoch verweisen die Geschäftslogik-Regeln auf die Regeln mit den Werten der UI-Eigenschaften, da dies die Werte sind, die vom Benutzer über die UI-Werkzeuge angegeben wurden.
Rule Length As Number = uiLength.Value
Durch die Festlegung des Vorgabewerts und die Durchleitung von Regeln im Mixin Rules und die anschließende Verknüpfung der UIProperty im Mixin UI kann die Benutzeroberfläche deaktiviert werden und das Modell erforderlichenfalls ohne die UI-Werkzeuge ausgeführt werden, indem einfach die verschiedenen UI-Mixins durch leere Designs überschrieben werden. Dies ist nützlich bei Stapelverarbeitungen, für die keine Benutzeroberfläche benötigt wird, und bei der Fehlerbehebung, wenn es erforderlich ist, die UI-Logik vollständig zu trennen.
Das Design Tischplatte (TableTop) ist ein einfacher Quader (Block) mit einer Länge, Breite und Dicke. Dies sind alles Parameter für das Design und verwenden die oben beschriebene Standardstruktur.
Parameter Rule dvLength As Number = 60.0 Rule Length As Number = dvLength Parameter Rule dvWidth As Number = 24.0 Rule Width As Number = dvWidth Parameter Rule dvThickness As Number = 1.0 Rule Thickness As Number = dvThickness
Das Design TableTopGraphics wird an Block beteiligt und überschreibt einfach die Regel für die Höhe des Quaders, um zur Dicke der Tischplatte zu werden.
Rule Height As Number = Thickness
Das Design Bein (Leg) ist ebenfalls ein einfacher Quader. Es besitzt jedoch nur eine Breite und eine Höhe.
Parameter Rule dvWidth As Number = 1.0 Rule Width As Number = dvWidth Parameter Rule dvHeight As Number = 24.0 Rule Height As Number = dvHeight
Das Design LegGraphics wird ebenfalls an Block beteiligt, überschreibt aber die Regel für die Länge des Quaders, um zur Breite des Beins zu werden. Dies erfolgt, damit die Beine viereckig werden.
Rule Length As Number = Width
Die Baugruppe Tisch (Table) enthält eine Tischplatte und vier Beine. Sie enthält außerdem die Parameter der obersten Ebene für das gesamte Modell, wie z. B. die Gesamthöhe des Tischs, seine Länge und Breite.
Parameter Rule dvHeight As Number = 24 Rule Height As Number = dvHeight Parameter Rule dvLength As Number = 60 Rule Length As Number = dvLength Parameter Rule dvWidth As Number = 24 Rule Width As Number = dvWidth
Die Tischplatte erhält ihre Vorgabewerte für die Länge und Breite von der Baugruppe Table. Entsprechend erhalten auch die einzelnen Beine ihre Vorgabewerte für die Höhe von der Baugruppe Table.
Child TableTop As :TableTop dvLength = length dvWidth = Width End Child Child Leg As :Leg, Quantity = 4 dvHeight = LegHeight End Child