Definición de modelos de dominio

Objective

After completing this lesson, you will be able to capturar modelos de dominio básicos mediante Core Data Services

Principios fundamentales de los modelos CDS

El rol de Core Data Services

Los Core Data Services (CDS) son un concepto fundamental en CAP. Proporcionan los medios para capturar de forma declarativa modelos de datos, así como modelos de servicio.

Vea el vídeo para comprender el enfoque basado en modelos.

En esta lección nos centraremos en los modelos de dominio. Los modelos de servicio se tratarán en la próxima lección.

La naturaleza de los modelos

Los modelos CDS se representan en Notación de esquema central (CSN). CSN (pronunciado como "season") es similar a JSON Schema, pero va más allá de las capacidades de JSON para capturar modelos y extensiones de entidad-relación.

Vea el vídeo para obtener un resumen de los formatos de origen y de destino de los modelos CDS.

En este aprendizaje, definiremos modelos en archivos .cds.

Entidades de dominio

Como se mencionó anteriormente, ahora veamos cómo crear modelos de dominio utilizando CDL. Para ello, creamos un archivo con la extensión .cds en la carpeta db del proyecto CAP. El nombre del archivo es arbitrario, un nombre de archivo común es, por ejemplo, schema.cds.

Primero, especificamos una entidad de dominio individual llamada Autores en el archivo (véase la figura Una entidad de dominio simple).

Las entidades de dominio son tipos estructurados con elementos con nombre y tipo que representan conjuntos de datos que se pueden leer y manipular utilizando operaciones CRUD habituales. Cuando se convierten en modelos de persistencia, las entidades se convierten en tablas.

Consejo

Convenciones para fijar nombres: se recomienda poner en mayúsculas los nombres de las entidades. Utilice también la forma plural para los nombres de entidad (p. ej. Autores). Elementos de inicio con una letra minúscula (por ejemplo, nombre).

Para tipificar los elementos, CDS viene con un pequeño conjunto de tipos integrados. Encontrará una lista de los tipos integrados en la documentación CDS.

La sintaxis entity Authors utilizada en la figura es equivalente a define entity Authors. Esto significa que la palabra clave define es opcional.

Utilice la palabra clave key para especificar uno o más elementos que formen la clave primaria de una entidad.

Consejo

Prefiera claves primarias técnicas simples que solo consten de un único campo. Utilice ID como nombre para este campo clave individual y escríbalo con el UUID de tipo de datos integrado. Los elementos de clave primaria con el tipo UUID se rellenan automáticamente al INSERT.

Áreas de nombres

Puede definir áreas de nombres que se aplican automáticamente a todos los nombres relevantes en un archivo. En el ejemplo mostrado, el nombre de entidad Autores tiene como prefijo el área de nombres com.sap.learning, lo que da como resultado com.sap.learning.Authors como el nombre de entidad completo. Los espacios de nombres son solo prefijos - no hay nada especial en ellos más allá de eso. Las áreas de nombres son opcionales: utilícelas si sus modelos se pueden reutilizar en otros proyectos; de lo contrario, puede prescindir de ellas.

Consejo

El enfoque de nombre de dominio inverso funciona bien para elegir espacios de nombres.

Tipos definidos por el cliente

Puede declarar tipos personalizados para elementos en definiciones de entidad. Los tipos personalizados pueden ser simples, es decir, derivados de uno de los tipos integrados, tipos estructurados o asociaciones. Aquí trataremos con tipos simples y estructurados. Las asociaciones se tratarán más adelante en el proceso de aprendizaje.

Tipos simples

En la figura Ejemplo de un tipo simple, se define un tipo simple llamado NoOfBooks . Se basa en el tipo de datos integrado Integer. Esto significa que, dondequiera que se utilice NoOfBooks , esencialmente representa un valor Integer .

La entidad Libros que se muestra tiene un elemento de stock que se escribe con el tipo NoOfBooks . Esto significa que el tipo de datos de este elemento es esencialmente Integer.

La definición

Code Snippet
1
type NoOfBooks : Integer;
utilizado en la figura equivale a lo siguiente:
Code Snippet
1
define type NoOfBooks : Integer;
Esto significa que la palabra clave define es opcional.

Nota

Los tipos personalizados pueden aumentar la expresividad semántica de sus modelos. Sin embargo, evite el uso excesivo de tales tipos. Son valiosos si tiene un nivel adecuado de reutilización. Sin reutilización, sus modelos solo se volverán más difíciles de leer y entender, ya que siempre tendrá que buscar las definiciones de tipo relevantes.

Tipos estructurados

Los tipos estructurados son tipos de datos personalizados que combinan uno o más elementos relacionados en un único tipo. Permiten crear estructuras de datos complejas y utilizarlas dentro de entidades.

La entidad Libros que se muestra en la figura Ejemplo de un tipo estructurado tiene un elemento de precio del tipo Price, que es un tipo estructurado definido por separado.

El tipo Price tiene dos elementos: importe del tipo integrado Decimal y moneda del tipo integrado String con una longitud máxima de 3 caracteres.

Consejo

Convenciones para fijar nombres: se recomienda poner en mayúsculas los nombres de tipo del mismo modo que los nombres de entidad. Sin embargo, a diferencia de los nombres de entidad, utilice la forma singular para los nombres de tipo (por ejemplo, Precio). 

Enumeraciones

Las enumeraciones (o enums para abreviar) se pueden utilizar para hacer que el código sea más legible y autoexplicativo, ya que le permiten sustituir valores crípticos por símbolos en la lógica de aplicación.

Puede especificar valores de enumeración para un tipo como una lista de símbolos separados por punto y coma con valores correspondientes asignados. Para los tipos de string, la asignación de valores reales es opcional; si se omite, los valores reales son los equivalentes de string de los símbolos.

La entidad Libros en la figura Ejemplo de números tiene un elemento llamado género de tipo Genre, que es un tipo personalizado con valores de enumeración.

El tipo Genre se basa en el tipo Integer integrado, lo que significa que cada símbolo de la enumeración corresponde a un valor Integer .

La enumeración Genre contiene dos símbolos: ficción, que corresponde a Integer valor 1, y non_fiction, que corresponde a Integer valor 2.

Recopilando modelos

Generación de archivos DDL

Cuando ejecuta cds watch en el terminal para iniciar un servidor, su modelo de dominio, que se define en la carpeta de base de datos del proyecto, se convierte automáticamente en un modelo de persistencia y se despliega en la base de datos configurada. Esto significa que las sentencias DDL SQL correspondientes se generan y ejecutan sobre la base de su modelo CDS.

También puede generar estas sentencias SQL DDL manualmente utilizando el siguiente comando en el terminal:

Code Snippet
1
cds compile <models> [<options>]
Puede obtener una descripción detallada de este comando ejecutando
Code Snippet
1
cds compile ?
en la terminal.

Para generar una secuencia de comandos DDL SQL para un modelo de dominio contenido en un archivo denominado schema.cds en la carpeta db del proyecto CAP, ejecute este comando en el directorio raíz del proyecto:

Code Snippet
1
cds compile db/schema.cds --to sql

El script DDL SQL en la figura Modelo CDS compilado se ha generado de esta manera.

Consejo

En lugar de introducir el comando anterior en el terminal, también puede seleccionar la siguiente entrada en el menú contextual del archivo .cds: Vistaprevia CDS como sql. Esto genera la misma salida que el comando de línea de comandos.

Vea el vídeo para comprender las reglas que se aplican a la salida DDL SQL generada.

Más adelante veremos que las entidades proyectadas se generan como vistas. También veremos que los campos de clave externa se crean automáticamente en las tablas de base de datos generadas para reflejar determinadas asociaciones que se pueden definir entre entidades.

Demostración y ejercicio: Capturar un Domain Model

Nota

Como ejercicio, lleve a cabo las instrucciones paso a paso en la siguiente demostración en SAP Business Application Studio.

Puede encontrar el código fuente de la simulación en las ramificaciones principal y 2_domain_model del siguiente repositorio GitHub:

https://github.com/SAP-samples/cap-development-learning-journey

La ramificación principal proporciona la plantilla inicial para la demostración, mientras que la rama 2_domain_model también contiene las fuentes creadas en la simulación.

Puede encontrar información detallada sobre el contenido del repositorio y cómo utilizarlo aquí.

Vea el vídeo para ver cómo capturar un modelo de dominio.