Properties-default-sources construct
La construcción properties-default-sources es análoga a la construcción parameters-default-sources. Mientras que la construcción parameters-default-sources permite reutilizar los parámetros existentes (de otros StyleBooks) en un StyleBook, la construcción properties-default-sources permite al usuario especificar las propiedades de un componente en función de las fuentes existentes.
Las propiedades de un componente pueden distribuirse en varias secciones del StyleBook. Por ejemplo, las propiedades pueden provenir de parámetros de objetos, sustituciones que devuelven un objeto, propiedades de otros componentes o salidas de otros componentes. En tales casos, debe redefinir las propiedades que aparecen en otras secciones del StyleBook en la definición del componente. Evidentemente, esto es redundante y puede provocar errores. Para solucionar este problema, se puede utilizar la construcción properties-default-sources. El componente fijo properties-default-sources es una lista en la que cada elemento identifica un origen para algunas propiedades del componente.
Por ejemplo, considere un componente que cree una lbvserver
configuración. Este componente define las propiedades de la lbvserver
siguiente manera.
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-->
En el ejemplo anterior, observe que los valores de todas las propiedades definidas en la sección de componentes se toman de $parameters.lb objeto. Aunque se toman de una sola fuente, las propiedades se definen de nuevo en el StyleBook. Además, si se agrega un nuevo subparámetro al objeto $parameters.lb que es relevante para la lbvserver
configuración de, debe actualizar el componente lb-comp para agregar la nueva propiedad que corresponde al nuevo subparámetro.
Para evitar redefinir las propiedades y obtener todas las propiedades relevantes de un componente sin enumerarlas explícitamente en la sección de propiedades, se puede utilizar la construcción properties-default-sources. El ejemplo anterior se puede escribir de la siguiente manera.
parameters:
-
name: lb
type: ns::lbvserver
components:
-
name: lb-comp
type: ns::lbvserver
properties-default-sources:
- $parameters.lb
<!--NeedCopy-->
En el ejemplo anterior, el uso de la construcción properties-default-sources reduce el tamaño de la definición del componente, lo que permite definir un componente de forma concisa. Además, cada vez que cambia el origen de las propiedades del componente, los cambios se reflejan automáticamente. Por ejemplo, cuando una nueva propiedad, por ejemplo persistencetype
, se agrega al objeto $parameters.lb, esta propiedad se agrega a la configuración de lb-comp de forma predeterminada ya que persistencetype
es una propiedad de lbvserver
. Por lo tanto, la construcción properties-default-sources proporciona una interfaz dinámica para definir los componentes sin preocuparse por los cambios que ocurren en las fuentes de las propiedades del componente.
Cálculo de las propiedades del componente
En esta sección se explica cómo se obtienen las propiedades si se utiliza la construcción properties-default-sources en un componente. En primer lugar, el compilador StyleBooks identifica la lista de propiedades de un componente en función de su tipo (en el ejemplo anterior, lbvserver
.) A continuación, el compilador obtiene estas propiedades de los múltiples orígenes en el orden en que se definen (en la sección properties-default-sources del componente). Si una propiedad existe en varios orígenes, la propiedad que aparece en el último origen tiene prioridad sobre otras. Por último, una propiedad obtenida mediante la construcción properties-default-sources se puede reemplazar en la sección de propiedades del componente. Es importante tener en cuenta que la definición de una sección de componentes al menos tiene una sección de propiedades predeterminadas-sources o una sección de propiedades. Puede que tenga ambas cosas.