Eigenschaften-Default-Source-Konstrukt
Das Konstrukt properties-default-sources entspricht dem Konstrukt parameters-default-sources. Während das Parameter-Default-Sources-Konstrukt die Wiederverwendung vorhandener Parameter (aus anderen StyleBooks) in einem StyleBook ermöglicht, ermöglicht das Properties-Default-Sources-Konstrukt dem Benutzer, Eigenschaften einer Komponente basierend auf vorhandenen Quellen anzugeben.
Die Eigenschaften einer Komponente können auf verschiedene Abschnitte des StyleBook verteilt werden. Die Eigenschaften können beispielsweise aus Objektparametern, Substitutionen, die ein Objekt zurückgeben, Eigenschaften anderer Komponenten oder Ausgaben anderer Komponenten stammen. In solchen Fällen müssen Sie die Eigenschaften, die in anderen Abschnitten des StyleBook vorkommen, in der Definition der Komponente neu definieren. Dies ist eindeutig überflüssig und kann zu Fehlern führen. Um dieses Problem zu lösen, kann das Konstrukt properties-default-sources verwendet werden. Das Eigenschaften-default-sources-Konstrukt ist eine Liste, in der jedes Element eine Quelle für einige Eigenschaften der Komponente identifiziert.
Stellen Sie sich zum Beispiel eine Komponente vor, die eine lbvserver-Konfiguration erstellt. Diese Komponente sollte die Eigenschaften des lbvservers wie folgt definieren.
parameters:
-
name: lb
type: ns::lbvserver
components:
-
name: lb-comp
type: ns::lbvserver
properties:
name: $parameters.lb.name
ipv46: $parameters.lb.ipv46
port: $parameters.lb.port
servicetype: $parameters.lb.servicetype
lbmethod: $parameters.lb.lbmethod
<!--NeedCopy-->
Beachten Sie im obigen Beispiel, dass die Werte für alle Eigenschaften, die im Komponentenabschnitt definiert sind, aus $parameters.lb Objekt genommen werden. Obwohl sie aus einer einzigen Quelle stammen, werden die Eigenschaften im StyleBook erneut definiert. Wenn dem $parameters.lb-Objekt ein neuer Unterparameter hinzugefügt wird, der für die Konfiguration des lbvservers relevant ist, müssen Sie außerdem die lb-comp-Komponente aktualisieren, um die neue Eigenschaft hinzuzufügen, die dem neuen Unterparameter entspricht.
Um eine Neudefinition von Eigenschaften zu vermeiden und alle relevanten Eigenschaften einer Komponente abzurufen, ohne sie explizit im Eigenschaftenabschnitt aufzulisten, kann Eigenschaftendefault-sources-Konstrukt verwendet werden. Das obige Beispiel kann wie folgt geschrieben werden.
parameters:
-
name: lb
type: ns::lbvserver
components:
-
name: lb-comp
type: ns::lbvserver
properties-default-sources:
- $parameters.lb
<!--NeedCopy-->
Im obigen Beispiel führt die Verwendung des Konstrukt properties-default-sources zu einer Verringerung der Größe der Komponentendefinition, sodass Sie eine Komponente präzise definieren können. Darüber hinaus werden jedes Mal, wenn sich die Quelle der Eigenschaften der Komponente ändert, die Änderungen automatisch reflektiert. Wenn zum Beispiel eine neue Eigenschaft, sagen wir „persistencetype“, zum $parameters.lb-Objekt hinzugefügt wird, wird diese Eigenschaft standardmäßig zur Konfiguration von lb-comp hinzugefügt, da persistencetype eine Eigenschaft von lbvserver ist. Somit bietet Eigenschaften-default-sources-Konstrukt eine dynamische Schnittstelle, um die Komponenten zu definieren, ohne sich Gedanken über Änderungen an den Quellen der Eigenschaften der Komponente zu machen.
Berechnung der Eigenschaften der Komponente
In diesem Abschnitt wird erläutert, wie die Eigenschaften abgerufen werden, wenn Eigenschaften-default-sources-Konstrukt in einer Komponente verwendet wird. Zunächst identifiziert der StyleBooks-Compiler die Liste der Eigenschaften für eine Komponente anhand ihres Typs (im obigen Beispiel lbvserver). Als Nächstes ruft der Compiler diese Eigenschaften aus den verschiedenen Quellen in der Reihenfolge ab, in der sie definiert sind (im Abschnitt properties-default-sources der Komponente). Wenn eine Eigenschaft in mehreren Quellen vorhanden ist, hat die Eigenschaft, die in der letzten Quelle angezeigt wird, Vorrang vor anderen. Schließlich kann eine Eigenschaft, die mit Eigenschaften-default-sources-Konstrukt abgerufen wird, im Eigenschaftenabschnitt der Komponente außer Kraft gesetzt werden. Es ist wichtig zu beachten, dass die Definition eines Komponentenabschnitts mindestens einen Abschnitt properties-default-sources oder einen Eigenschaftenabschnitt haben sollte. Es kann beides haben.