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 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 DSL se genera a partir de este archivo.Most of the program code in the DSL solution is generated from this file.

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

La definición de DSLThe DSL Definition

Cuando se abre Dsl\DslDefinition.dsl, Visual StudioVisual Studio pantalla será similar a la siguiente imagen.When you open Dsl\DslDefinition.dsl, your Visual StudioVisual Studio window resembles the following picture.

Diseñador DSLdsl designer

La información más importante en la definición de DSL se muestra en el diagrama de definición DSL.The most important information in the DSL Definition is displayed in the DSL Definition diagram. Obtener información adicional, que también es 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 DSL muestra las clases de dominio que definen los elementos del modelo y las relaciones que definen vínculos entre elementos del 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 para el usuario.It also shows the shapes and connectors that are used to display the model elements to the user.

Diseñador DSL con carrildsl designer with swimlane

Cuando se selecciona un elemento en la definición 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

A modelo es una instancia del ADSL creada por un usuario.A model is an instance of your DSL created by a user. Un modelo contiene elementos del modelo, que son instancias de las clases de dominio que definen y los 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 muestran 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 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 conocido como un modelo de dominio.A DSL Definition is also known as a domain model. Un modelo de definición 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 elementos del modeloDomain Classes define Model Elements

Clases de dominio se utilizan para crear los diversos 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. Únicamente son la representación en tiempo de diseño de los elementos y los vínculos que se crearán instancias por los usuarios del lenguaje específico de diseño cuando crean 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 ADSL.This illustration shows a model that has been created by the user of a music library DSL. Álbumes de música se representan mediante cuadros que contienen listas de canciones.Music albums are represented by boxes that contain lists of songs. Intérpretes se representan mediante cuadros de esquinas redondeadas y están conectados a los álbumes que han contribuido.Artists are represented by round-cornered boxes, and are connected to the albums to which they have contributed.

Modelo de instancia de DSL generadoInstance model of generated DSL

La definición DSL separa los 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 las relaciones de dominio.The information carried in the model is defined using domain classes and domain relationships.

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

Las relaciones de incrustación y referenciaEmbedding and Reference relationships

La ilustración muestra cuatro clases de dominio: música, álbum, intérprete y canción.The illustration shows four domain classes: Music, Album, Artist and Song. Las clases de dominio definen 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 DSLRearranging the DSL Definition Diagram

Tenga en cuenta que una clase de dominio puede aparecer varias veces en el diagrama de definición 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 algunas referencia vistas.There is always one main view, and there can be some reference views.

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

  • Intercambiar principal y hacen referencia a vistas mediante la poner árbol aquí y división árbol comandos.Swap main and reference views by using the Bring Tree Here and Split Tree commands. Haga clic en una clase de dominio individual 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, presione Ctrl+flecha 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 a 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 pueden definirse 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 del modelo tiene todas las propiedades que se definen en su propia clase de dominio, junto con todas las propiedades que se hereda 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 dentro del 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

Elementos del modelo se pueden vincular mediante relaciones.Model elements can be linked by relationships. Vínculos siempre son binarios; se vinculan a 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 y como se pueden definir clases diferentes 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. La clase de un vínculo se denomina 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. Cada extremo de una relación se denomina un rol, y la relación de dominio define los nombres de las dos funciones, así como para la relación propiamente dicha.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: incrustar relaciones y referencia.There are two kinds of domain relationships: embedding relationships and reference relationships. En el diagrama de definición DSL, 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.

Incrustación de relacionesEmbedding Relationships

Todos los elementos de un modelo, salvo por 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 contención o la propiedad.An embedding relationship represents containment or ownership. Dos elementos del 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. El elemento secundario se dice que se incrustan en el elemento primario.The child is said to be embedded in the parent.

Incrustación de vínculos no se normalmente muestran explícitamente que los conectores en un diagrama.Embedding links are not usually shown explicitly as connectors on a diagram. En su lugar, normalmente se representan mediante la 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 música tiene una relación de incrustación MusicHasAlbums a álbum, que tiene un AlbumHasSongs incrustación canción.In the example, the root class Music has an embedding relationship MusicHasAlbums to Album, which has an embedding AlbumHasSongs to Song. Canciones se muestran como elementos en 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 de intérprete, cuyas instancias también aparecen como formas en el 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, los 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.

Nota

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 propiedades del elemento primario.Children in an embedding relationship do not inherit the parent's properties. Una incrustación es un tipo de vínculo entre elementos del modelo.An embedding is a type of link between model elements. Herencia es una relación entre las clases y no crea vínculos entre elementos del 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 no abstracta, excepto la clase raíz, debe ser el destino de al menos una relación de incrustación o debe heredar una incrustació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 las 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 de destino a 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 DSL también crea un explorador, que los usuarios ven junto con su diagrama del modelo.Your DSL Definition also creates an explorer, which users see alongside their model diagram.

Explorador generado de DSLGenerated explorer of DSL

El explorador muestra todos los elementos en el modelo, incluso aquellos para los 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. Muestran 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 de 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 es no incrustar.A reference relationship represents any kind of relationship that is not embedding.

Las relaciones de referencia normalmente se muestran en un diagrama que los 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 se representa mediante monikers.In the XML representation of the model, a reference link between two elements is represented using monikers. Es decir, monikers son nombres que identifican de forma exclusiva 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 las Publisher 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 clase de dominio es el rol de destino.The line between the domain relationship and the Album domain class is the target role.

Las funciones y propiedades. Roles and properties.

Los nombres asociados con una relación son especialmente importantes cuando se escribe código de programa que atraviesa el modelo.The names associated with a relationship are especially important when you write program code that traverses the model. Por ejemplo, cuando se compila la solución DSL, la clase generada publicador 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 propiedad de publicador que es una única instancia de la clase de publicador.The class Album has a property Publisher that is a single instance of the class Publisher.

Cuando se crea una relación en una definición DSL, los nombres de propiedad y la relación tienen 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..*) configuración de la multiplicidad en el catálogo rol especifica que cualquier instancia de la Publisher clase de dominio puede tener tantos PublisherCatalog relación vincula 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 la 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 describe la configuración de esta propiedad.The following table describes the settings for this property.

Tipo de multiplicidadMultiplicity type DescripciónDescription
0.. * (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 0 a 1 (cero a uno)0..1 (Zero to one) Cada instancia de la clase de dominio puede tener no más de una instancia de la relación o ninguna 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 una multiplicidad de este 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 almacén 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 de 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. Aparecerá un cuadro de clase adicional.An additional class box will appear. Relaciones, a continuación, puede conectarse a él.You can then connect relationships to it.

Puede definir una relación en parte por herencia, igual que lo haría 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 Base relación en la ventana Propiedades.Select the derived relationship and set Base Relationship in the Properties window.

Una relación derivada especializa su relación de base.A derived relationship specializes its base relationship. El dominio de las clases que TI vínculos deben derivarse de o igual a las clases vinculadas mediante la relación de 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 en un modelo, es una instancia de la clase derivada y las relaciones de base.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

Glosario de herramientas de lenguaje específico de dominioDomain-Specific Language Tools Glossary