Introducción a los modelos, las clases y las relacionesUnderstanding Models, Classes and Relationships

Un lenguaje específico de dominio (DSL) se define mediante su archivo de definición de DSL, junto con cualquier código de programa personalizado que se haya escrito.A domain-specific language (DSL) is defined by its DSL Definition file, together with any custom program code that you might write. La mayoría del código de programa en la solución de DSL se genera a partir de este archivo.Most of the program code in the DSL solution is generated from this file.

En este tema se explica las características principales de la definición de DSL.This topic explains the central features of the DSL definition.

La definición de DSLThe DSL Definition

Al abrir Dsl\DslDefinition.dsl, la ventana de Visual Studio es similar a la siguiente imagen.When you open Dsl\DslDefinition.dsl, your Visual Studio window resembles the following picture.

diseñador dsl

La información más importante en la definición de DSL se muestra en el diagrama de definición de DSL.The most important information in the DSL Definition is displayed in the DSL Definition diagram. Obtener información adicional, que también forma parte de DslDefinition.dsl, se muestra en el Explorador de DSL, que normalmente aparece en el lado del diagrama.Additional information, which is also part of DslDefinition.dsl, is displayed in DSL Explorer, which usually appears at the side of the diagram. Trabajar con el diagrama para las tareas más frecuentes y con el Explorador de DSL para las personalizaciones más avanzadas.You work with the diagram for the most frequent tasks, and with DSL Explorer for more advanced customizations.

El diagrama de definición de DSL muestra las clases de dominio que definen los elementos del modelo y las relaciones que definen vínculos entre elementos de modelo.The DSL Definition diagram shows the domain classes that define model elements, and the relationships that define links between model elements. También muestra las formas y conectores que se usan para mostrar los elementos del modelo al usuario.It also shows the shapes and connectors that are used to display the model elements to the user.

diseñador dsl con carril (cal

Cuando se selecciona un elemento en la definición de DSL, en el diagrama o en el Explorador de DSL, se muestra información sobre él en la ventana Propiedades.When you select an item in the DSL definition, either on the diagram or in DSL Explorer, information about it is displayed in the Properties window. Información adicional puede mostrarse en la ventana Detalles de DSL.Additional information may be displayed in the DSL Details window.

Los modelos son instancias de DSLModels are instances of DSLs

Un modelo es una instancia de DSL creada por un usuario.A model is an instance of your DSL created by a user. Un modelo contiene los elementos del modelo, que son instancias de las clases de dominio que definen y vínculos entre los elementos, que son instancias de las relaciones de dominio que defina.A model contains model elements, which are instances of the domain classes that you define, and links between the elements, which are instances of the domain relationships that you define. También puede tener un modelo de formas y conectores que mostrar los elementos del modelo y los vínculos en un diagrama.A model can also have shapes and connectors, which display the model elements and links on a diagram. La definición de DSL incluye las clases de forma, las clases de conector y una clase para el diagrama.The DSL definition includes the shape classes, connector classes, and a class for the diagram.

Una definición de DSL es también se denomina un modelo de dominio.A DSL Definition is also known as a domain model. Un modelo de definición de DSL o de dominio es la representación en tiempo de diseño del lenguaje específico de dominio, mientras que el modelo es la creación de instancias de tiempo de ejecución del lenguaje específico de dominio.A DSL Definition or domain model is the design-time representation of the domain-specific language, whereas the model is the run-time instantiation of the domain-specific language.

Las clases de dominio definen los elementos del modeloDomain Classes define Model Elements

Clases de dominio se utilizan para crear los distintos elementos en el dominio y las relaciones de dominio son los vínculos entre los elementos.Domain classes are used to create the various elements in the domain, and domain relationships are the links between the elements. Son la representación en tiempo de diseño de los elementos y vínculos que se crearán instancias por los usuarios del lenguaje de diseño específicos al crear sus modelos.They are the design-time representation of the elements and links that will be instantiated by the users of the design-specific language when they create their models.

En esta ilustración se muestra un modelo que se ha creado por el usuario de una biblioteca de música DSL.This illustration shows a model that has been created by the user of a music library DSL. Álbumes de música se representan mediante los cuadros que contienen listas de canciones.Music albums are represented by boxes that contain lists of songs. Los artistas se representan mediante los cuadros de esquinas redondeadas y están conectados a los álbumes a la que han contribuido con.Artists are represented by round-cornered boxes, and are connected to the albums to which they have contributed.

Modelo de instancia de DSL generado

La definición de DSL separa dos aspectos.The DSL Definition separates two aspects. La apariencia de los elementos del modelo en el diagrama del modelo se define mediante el uso de las clases de formas y las clases de conector.The appearance of the model elements on the model diagram is defined by using shape classes and connector classes. La información que lleva en el modelo se define mediante las clases de dominio y relaciones de dominio.The information carried in the model is defined using domain classes and domain relationships.

La siguiente ilustración muestra las clases de dominio y relaciones en la definición de DSL de la biblioteca de música.The following illustration shows the domain classes and relationships in the DSL Definition of the Music Library.

Relaciones de incrustación y referencia

La ilustración muestra cuatro clases de dominio: música, álbum, artista y canción.The illustration shows four domain classes: Music, Album, Artist and Song. Las clases de dominio definen las propiedades de dominio como nombre, título y así sucesivamente.The domain classes define domain properties such as Name, Title, and so on. En el modelo de instancia, los valores de algunas de estas propiedades se muestran en el diagrama.In the instance model, the values of some of these properties are displayed on the diagram.

Entre las clases son las relaciones de dominio: MusicHasAlbums, MusicHasArtists, AlbumbHasSongs y ArtistAppearedOnAlbums.Between the classes are domain relationships: MusicHasAlbums, MusicHasArtists, AlbumbHasSongs, and ArtistAppearedOnAlbums. Las relaciones tienen multiplicidades como 1..1, 0.. *.The relationships have multiplicities such as 1..1, 0..*. Por ejemplo, todas las canciones deben estar relacionado con exactamente un álbum a través de la relación AlbumHasSongs.For example, every Song must be related to exactly one Album through the AlbumHasSongs relationship. Cada álbum puede tener cualquier número de canciones.Every Album can have any number of Songs.

Reorganizar el diagrama de definición de DSLRearranging the DSL Definition Diagram

Tenga en cuenta que una clase de dominio puede aparecer varias veces en el diagrama de definición de DSL, como álbum en esta imagen.Notice that a domain class can appear several times on the DSL Definition diagram, as Album does in this picture. Siempre hay una vista principal, y puede haber algunos referencia vistas.There is always one main view, and there can be some reference views.

Para reorganizar el diagrama de definición de DSL, hacer lo siguiente:To rearrange the DSL Definition diagram, you can:

  • Intercambiar principal y hacer referencia a vistas mediante el Traer árbol aquí y dividir árbol comandos.Swap main and reference views by using the Bring Tree Here and Split Tree commands. Haga clic en una clase de dominio único para ver estos comandos.Right-click a single domain class to see these commands.

  • Cambiar el orden de las clases de dominio y las clases de formas presionando Ctrl + arriba y Ctrl+flecha abajo.Re-order the domain classes and shape classes by pressing Ctrl+Up and Ctrl+Down.

  • Contraer o expandir las clases mediante el icono en la superior derecha de cada forma.Collapse or expand classes using the icon at the upper-right of each shape.

  • Contraer partes del árbol, haga clic en el signo menos (-) en la parte inferior de una clase de dominio.Collapse parts of the tree by clicking the minus sign (-) at the bottom of a domain class.

HerenciaInheritance

Clases de dominio se pueden definir mediante herencia.Domain classes can be defined using inheritance. Para crear una derivación de herencia, haga clic en la herramienta de herencia, haga clic en la clase derivada y, a continuación, haga clic en la clase base.To create an inheritance derivation, click the Inheritance tool, click the derived class, and then click the base class. Un elemento de modelo tiene todas las propiedades que se definen en su propia clase de dominio, junto con todas las propiedades heredadas de la clase base.A model element has all the properties that are defined on its own domain class, together with all the properties inherited from the base class. También hereda sus roles en las relaciones.It also inherits its roles in relationships.

También puede utilizarse la herencia entre las relaciones, formas y conectores.Inheritance can also be used between Relationships, Shapes, and Connectors. Herencia debe mantener en el mismo grupo.Inheritance must keep within the same group. Una forma no puede heredar de una clase de dominio.A shape cannot inherit from a domain class.

Relaciones de dominioDomain Relationships

Los elementos del modelo se pueden vincular mediante relaciones.Model elements can be linked by relationships. Vínculos siempre son binarios; se vinculan exactamente dos elementos.Links are always binary; they link exactly two elements. Sin embargo, cualquier elemento puede tener muchos vínculos a otros objetos, y que incluso puede haber más de un vínculo entre el mismo par de elementos.However, any element can have many links to other objects, and there can even be more than one link between the same pair of elements.

Tal como se puede definir diferentes clases de elementos, puede definir diferentes clases de vínculos.Just as you can define different classes of elements, you can define different classes of links. Se llama a la clase de un vínculo a un relación de dominio.The class of a link is called a domain relationship. Una relación de dominio especifica qué clases de elemento se pueden conectar sus instancias.A domain relationship specifies what classes of element its instances can connect. Se llama a cada extremo de una relación de un rol, y la relación de dominio define los nombres de los dos roles, así como para la propia relación.Each end of a relationship is called a role, and the domain relationship defines names for the two roles, as well as for the relationship itself.

Hay dos tipos de relaciones de dominio: inserción de relaciones y relaciones de referencia.There are two kinds of domain relationships: embedding relationships and reference relationships. En el diagrama de definición de DSL, las relaciones de incrustación tienen líneas sólidas en cada rol y las relaciones de referencia han líneas de guiones.On the DSL Definition diagram, embedding relationships have solid lines at each role, and reference relationships have dashed lines.

Las relaciones de incrustaciónEmbedding Relationships

Todos los elementos de un modelo, excepto su raíz, es el destino de un vínculo de incrustación.Every element in a model, except for its root, is the target of one embedding link. Por lo tanto, todo el modelo conforma un único árbol de incrustación de vínculos.Therefore, the whole model forms a single tree of embedding links. Una relación de incrustación representa la propiedad o contención.An embedding relationship represents containment or ownership. Dos elementos de modelo que están relacionados de esta manera son también conocido como primarios y secundarios.Two model elements that are related in this way are also known as parent and child. Se dice que el elemento secundario incrustado en el elemento primario.The child is said to be embedded in the parent.

Vínculos de incrustación no normalmente aparecen explícitamente como conectores en un diagrama.Embedding links are not usually shown explicitly as connectors on a diagram. En su lugar, normalmente se representan por contención.Instead, they are usually represented by containment. La raíz del modelo se representa mediante el diagrama y elementos incrustados en ella se muestran como formas del diagrama.The root of the model is represented by the diagram, and elements embedded in it are displayed as shapes on the diagram.

En el ejemplo, la clase raíz Music tiene una relación de incrustación MusicHasAlbums al álbum, que tiene una incrustación AlbumHasSongs canción.In the example, the root class Music has an embedding relationship MusicHasAlbums to Album, which has an embedding AlbumHasSongs to Song. Las canciones se muestran como elementos de una lista dentro de cada álbum.Songs are displayed as items in a list inside each Album. Música también tiene una incrustación MusicHasArtists a la clase del intérprete, cuyas instancias también aparecen como formas del diagrama.Music also has an embedding MusicHasArtists to the Artist class, whose instances also appear as shapes on the diagram.

De forma predeterminada, los elementos incrustados se eliminan automáticamente cuando se eliminan sus elementos primarios.By default, embedded elements are automatically deleted when their parents are deleted.

Cuando se guarda un modelo de archivos en formato XML, elementos incrustados están anidados dentro de sus elementos primarios, a menos que haya personalizado la serialización.When a model is saved to file in XML form, embedded elements are nested inside their parents, unless you have customized the serialization.

Note

Incrustación no es lo mismo que herencia.Embedding is not the same as inheritance. Los elementos secundarios en una relación de incrustación no heredan las propiedades del elemento primario.Children in an embedding relationship do not inherit the parent's properties. Una inclusión es un tipo de vínculo entre elementos de modelo.An embedding is a type of link between model elements. La herencia es una relación entre las clases y no crea vínculos entre elementos de modelo.Inheritance is a relationship between classes, and does not create links between model elements.

Reglas de incrustaciónEmbedding rules

Todos los elementos de un modelo de instancia deben ser el destino de exactamente un vínculo de incrustación, excepto la raíz del modelo.Every element in an instance model must be the target of exactly one embedding link, except for the root of the model.

Por lo tanto, cada clase de dominio de no abstracta, excepto la clase raíz, debe ser el destino de al menos una relación de incrustación, o deben heredar de inclusión de una clase base.Therefore, every non-abstract domain class, except the root class, must be the target of at least one embedding relationship, or it must inherit an embedding from a base class. Una clase puede ser el destino de incrustaciones de dos o más, pero sus elementos de modelo de instancia solo pueden tener un elemento primario a la vez.A class can be the target of two or more embeddings, but its instance model elements can only have one parent at a time. La multiplicidad del destino al origen debe ser de 0.. 1 o 1.. 1.The multiplicity from target to source must be 0..1 or 1..1.

El explorador muestra el árbol de incrustaciónThe Explorer Displays the Embedding Tree

La definición de DSL crea también un explorador, lo que ven los usuarios junto con su diagrama del modelo.Your DSL Definition also creates an explorer, which users see alongside their model diagram.

Explorador generado de DSL

El explorador muestra todos los elementos en el modelo, incluso aquellos que no ha definido ninguna forma.The explorer shows all the elements in the model, even those for which you have not defined any shapes. Muestra los elementos y relaciones de incrustación, pero no hacer referencia a las relaciones.It shows elements and embedding relationships, but not reference relationships.

Para ver los valores de las propiedades de dominio de un elemento, el usuario selecciona un elemento, en el diagrama del modelo o en el Explorador de modelos y abre la ventana Propiedades.To see the values of the domain properties of an element, the user selects an element, either in the model diagram or in the model explorer, and opens the Properties window. Muestra todas las propiedades de dominio, los que no se muestran en el diagrama incluidos.It displays all the domain properties, including those that are not displayed on the diagram. En el ejemplo, cada canción tiene un título y un género, pero solo el valor del título se muestra en el diagrama.In the example, each Song has both a Title and a Genre, but only the value of the Title is shown on the diagram.

Relaciones de referenciaReference Relationships

Una relación de referencia representa cualquier tipo de relación que no se insertan.A reference relationship represents any kind of relationship that is not embedding.

Las relaciones de referencia normalmente se muestran en un diagrama como conectores entre las formas.Reference relationships are typically displayed on a diagram as connectors between shapes.

En la representación XML del modelo, un vínculo de referencia entre dos elementos que se representa mediante monikers.In the XML representation of the model, a reference link between two elements is represented using monikers. Es decir, los monikers son nombres que identifican de forma única cada elemento en el modelo.That is, monikers are names that uniquely identify each element in the model. El nodo XML para cada elemento del modelo contiene un nodo que especifica el nombre de la relación y el moniker del otro elemento.The XML node for each model element contains a node that specifies the name of the relationship and the moniker of the other element.

RolesRoles

Cada relación de dominio tiene dos funciones, un rol de origen y un rol de destino.Every domain relationship has two roles, a source role and a target role.

En la siguiente imagen, la línea entre el Publisher la clase de dominio y el PublisherCatalog relación de dominio es el rol de origen.In the following picture, the line between the Publisher domain class and the PublisherCatalog domain relationship is the source role. La línea entre la relación de dominio y el álbum la clase de dominio es el rol de destino.The line between the domain relationship and the Album domain class is the target role.

Roles y propiedades.

Los nombres asociados con una relación son especialmente importantes al escribir código de programa que recorre el modelo.The names associated with a relationship are especially important when you write program code that traverses the model. Por ejemplo, al compilar la solución de DSL, el publicador de la clase generada tiene una propiedad de catálogo que es una colección de álbumes.For example, when you build the DSL solution, the generated class Publisher has a property Catalog that is a collection of Albums. La clase álbum tiene una publicador que es una única instancia de la clase de publicador de la propiedad.The class Album has a property Publisher that is a single instance of the class Publisher.

Al crear una relación en una definición de DSL, los nombres de propiedad y la relación se proporcionan los valores predeterminados.When you create a relationship in a DSL Definition, the property and relationship names are given default values. Sin embargo, puede cambiarlos.However, you can change them.

MultiplicidadesMultiplicities

Multiplicidades especifican cuántos elementos puede tener el mismo rol en una relación de dominio.Multiplicities specify how many elements can have the same role in a domain relationship. En el ejemplo, el cero a varios (0..*) valor de multiplicidad en el catálogo rol especifica que cualquier instancia de la Publisher la clase de dominio puede tener tantos PublisherCatalog vínculos de relación como desee darle.In the example, the zero-to-many (0..*) multiplicity setting on the Catalog role specifies that any instance of the Publisher domain class can have as many PublisherCatalog relationship links as you want to give it.

Configurar la multiplicidad de un rol escribiendo en el diagrama o modificando el Multiplicity propiedad en el propiedades ventana.Configure the multiplicity of a role either by typing on the diagram or by modifying the Multiplicity property in the Properties window. En la tabla siguiente se describe la configuración de esta propiedad.The following table describes the settings for this property.

Tipo de multiplicidadMultiplicity type DescripciónDescription
0.. * (de cero a muchos)0..* (Zero to many) Cada instancia de la clase de dominio puede tener varias instancias de la relación o ninguna instancia de la relación.Each instance of the domain class can have multiple instances of the relationship or no instances of the relationship.
(De cero a uno) de 0.. 10..1 (Zero to one) Cada instancia de la clase de dominio puede tener ninguna instancia de la relación o de no más de una instancia de la relación.Each instance of the domain class can have no more than one instance of the relationship or no instances of the relationship.
1..1 (uno)1..1 (One) Cada instancia de la clase de dominio puede tener una instancia de la relación.Each instance of the domain class can have one instance of the relationship. No se puede crear más de una instancia de esta relación desde cualquier instancia de la clase de función.You cannot create more than one instance of this relationship from any instance of the role class. Si está habilitada la validación, aparecerá un error de validación cuando cualquier instancia de la clase de función no tiene ninguna instancia de la relación.If validation is enabled, a validation error will appear when any instance of the role class has no instance of the relationship.
1.. * (uno a varios)1..* (One to many) Cada instancia de la clase en el rol que tiene esta multiplicidad puede tener varias instancias de la relación, y cada instancia debe tener al menos una instancia de la relación.Each instance of the class on the role that has this multiplicity can have multiple instances of the relationship, and each instance must have at least one instance of the relationship. Si está habilitada la validación, aparecerá un error de validación cuando cualquier instancia de la clase de función no tiene ninguna instancia de la relación.If validation is enabled, a validation error will appear when any instance of the role class has no instance of the relationship.

Relaciones de dominio como clasesDomain Relationships as Classes

Un vínculo se representa en el Store como una instancia de LinkElement, que es una clase derivada de ModelElement.A link is represented in the Store as an instance of LinkElement, which is a derived class of ModelElement. Puede definir estas propiedades en el diagrama del modelo de dominio en las relaciones de dominio.You can define these properties in the domain model diagram on domain relationships.

También puede establecer una relación el origen o destino de otras relaciones.You can also make a relationship the source or target of other relationships. En el diagrama de modelo de dominio, haga clic en la relación de dominio y, a continuación, haga clic en mostrar como clase.In the domain model diagram, right-click the domain relationship and then click Show As Class. Se mostrará un cuadro de clase adicional.An additional class box will appear. Las relaciones, a continuación, puede conectarse a él.You can then connect relationships to it.

Puede definir una relación parte por herencia, se puede hacer con las clases de dominio.You can define a relationship partly by inheritance, just as you can with domain classes. Seleccione la relación derivada y establezca relación Base en la ventana Propiedades.Select the derived relationship and set Base Relationship in the Properties window.

Una relación derivada especializa su relación base.A derived relationship specializes its base relationship. El dominio de las clases que TI vínculos deben derivarse de o igual que las clases vinculadas mediante la relación base.The domain classes that it links should be derived from or the same as the classes linked by the base relationship. Cuando se crea un vínculo de la relación derivada de un modelo, es una instancia de la clase derivada y las relaciones bases.When a link of the derived relationship is created in a model, it is an instance of both the derived and the base relationships. En el código de programa, puede navegar con el extremo opuesto del vínculo mediante las propiedades generadas por la base o la clase derivada.In program code, you can navigate to the opposite end of the link using the properties generated either by the base or by the derived class.

Vea tambiénSee Also