Definição de modelos de domínio

Objective

After completing this lesson, you will be able to capturar modelos de domínio básicos usando Core Data Services

Princípios fundamentais dos modelos CDS

A função do Core Data Services

Core Data Services (CDS) são um conceito fundamental no CAP. Eles fornecem os meios para capturar de forma declarativa modelos de dados, bem como modelos de serviço.

Assista ao vídeo para compreender a abordagem baseada no modelo.

Nesta lição, vamos nos concentrar em modelos de domínio. Os modelos de serviço serão abordados na próxima lição.

A Natureza dos Modelos

Os modelos CDS são representados na notação de esquema central (CSN). CSN (pronunciado como "temporada") é semelhante ao esquema JSON, mas vai além dos recursos do JSON para capturar modelos entidade-relacionamento completos e extensões.

Assista ao vídeo para obter uma síntese dos formatos de origem e de destino dos modelos CDS.

Neste aprendizado, vamos definir modelos em arquivos .cds.

Entidades de domínio

Como mencionado anteriormente, vamos agora analisar como criar modelos de domínio usando CDL. Para isso, criamos um arquivo com a extensão .cds na pasta db do projeto CAP. O nome do arquivo é arbitrário, um nome de arquivo comum é, por exemplo, schema.cds.

Primeiro, especificamos uma entidade de domínio único chamada Autores no arquivo (veja a figura Uma Entidade de Domínio Simples).

Entidades de domínio são tipos estruturados com elementos nomeados e tipificados que representam conjuntos de dados que podem ser lidos e manipulados usando operações CRUD usuais. Quando convertidas em modelos de persistência, as entidades se tornam tabelas.

Dica

Convenções de nomes: é recomendado colocar em maiúsculas os nomes de entidades. Utilize também o formulário plural para nomes de entidade (por exemplo, Autores). Iniciar elementos com uma letra minúscula (por exemplo, nome).

Para digitar os elementos, o CDS vem com um pequeno conjunto de tipos integrados. Uma lista dos tipos integrados pode ser encontrada na documentação CDS.

A sintaxe entity Authors usada na figura é equivalente a define entity Authors. Isso significa que a palavra-chave define é opcional.

Utilize a palavra-chave key para indicar um ou mais elementos que formam a chave primária de uma entidade.

Dica

Preferir chaves primárias técnicas simples que consistem apenas em um campo individual. Utilize ID como nome para este campo-chave individual e digite-o com o UUID do tipo de dados integrado. Os elementos de chave primária com o tipo UUID são preenchidos automaticamente ao INSERT.

Espaços de nomes

Você pode definir espaços de nomes que são aplicados automaticamente a todos os nomes relevantes em um arquivo. No exemplo exibido, o nome da entidade Autores tem como prefixo o espaço de nomes com.sap.learning, resultando em com.sap.learning.Authors como nome completo da entidade. Namespaces são apenas prefixos - não há nada de especial sobre eles além disso. Os espaços de nomes são opcionais - utilize-os se seus modelos puderem ser reutilizados em outros projetos; caso contrário, você pode fazer sem eles.

Dica

A abordagem de nome de domínio reverso funciona bem para escolher espaços de nomes.

Tipos personalizados

Você pode declarar tipos personalizados para elementos nas definições de entidade. Os tipos personalizados podem ser tipos simples, ou seja, derivados de um dos tipos integrados, tipos estruturados ou associações. Aqui vamos lidar com tipos simples e estruturados. As associações serão abordadas posteriormente na Learning Journey.

Tipos simples

Na figura Exemplo de um tipo simples, um tipo simples chamado NoOfBooks é definido. Ele é baseado no tipo de dados integrado Integer. Isso significa que onde NoOfBooks é usado, ele representa essencialmente um valor Integer .

A entidade Livros exibida tem um elemento de estoque digitado com o tipo NoOfBooks . Isso significa que o tipo de dados desse elemento é essencialmente Integer.

A definição

Code Snippet
1
type NoOfBooks : Integer;
usado na figura é equivalente ao seguinte:
Code Snippet
1
define type NoOfBooks : Integer;
Isso significa que a palavra-chave define é opcional.

Nota

Tipos personalizados podem aumentar a expressividade semântica de seus modelos. No entanto, evite o uso excessivo desses tipos. Eles são valiosos se você tiver um nível apropriado de reutilização. Sem reutilização, seus modelos só se tornarão mais difíceis de ler e entender, pois você sempre terá que procurar as definições de tipo relevantes.

Tipos estruturados

Tipos estruturados são tipos de dados personalizados que combinam um ou mais elementos relacionados em um único tipo. Eles permitem criar estruturas de dados complexas e utilizá-las em entidades.

A entidade Livros mostrada na figura Exemplo de um tipo estruturado tem um elemento de preço do tipo Price, que é um tipo estruturado definido separadamente.

O tipo Price tem dois elementos: montante do tipo integrado Decimal e moeda do tipo integrado String com um comprimento máximo de 3 caracteres.

Dica

Convenções de nomes: é recomendado colocar em maiúsculas os nomes de tipo da mesma forma que os nomes de entidade. No entanto, ao contrário dos nomes de entidade, use o formulário singular para nomes de tipo (por exemplo, preço). 

Enumerações

Enumerações (ou enumerações para abreviar) podem ser usadas para tornar o código mais legível e auto-explicativo, uma vez que permitem que você substitua valores crípticos por símbolos na lógica de aplicação.

Você pode indicar valores de enumeração para um tipo como uma lista separada por ponto-e-vírgula de símbolos com valores correspondentes atribuídos. Para tipos de cadeia, a atribuição de valores reais é opcional; se omitidos, os valores reais são os equivalentes de cadeia dos símbolos.

A entidade Books na figura Exemplo de enumeração tem um elemento chamado gênero do tipo Genre, que é um tipo personalizado com valores de enumeração.

O tipo Genre é baseado no tipo Integer integrado, o que significa que cada símbolo na enumeração corresponde a um valor Integer .

A enumeração Genre contém dois símbolos: ficção, que corresponde a Integer valor 1, e não-ficção, que corresponde a Integer valor 2.

Compilando modelos

Geração de arquivos DDL

Quando você executa cds watch no terminal para iniciar um servidor, seu Domain Model, que é definido na pasta db do projeto, é automaticamente convertido em um modelo de persistência e implementado no banco de dados configurado. Isso significa que as instruções DDL SQL correspondentes são geradas e executadas com base em seu modelo CDS.

Você também pode gerar essas instruções DDL SQL manualmente usando o seguinte comando no terminal:

Code Snippet
1
cds compile <models> [<options>]
Você obtém uma descrição detalhada deste comando executando
Code Snippet
1
cds compile ?
no terminal.

Para gerar um script SQL DDL para um Domain Model contido em um arquivo chamado schema.cds na pasta db do projeto CAP, execute este comando no diretório raiz do projeto:

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

O script DDL SQL na figura Modelo CDS compilado foi gerado dessa forma.

Dica

Em vez de inserir o comando acima no terminal, você também pode selecionar a seguinte entrada no menu de contexto do arquivo .cds: CDS PreviewPreview as sql. Isso gera a mesma saída que o comando de linha de comando.

Assista ao vídeo para compreender as regras que se aplicam à saída DDL SQL gerada.

Mais tarde, veremos que as entidades projetadas são geradas como visões. Veremos também que os campos de chave externa são criados automaticamente nas tabelas de banco de dados geradas para refletir determinadas associações que podem ser definidas entre entidades.

Demonstração e exercício: capturar um Domain Model

Nota

Como exercício, execute as instruções passo a passo na demonstração a seguir no SAP Business Application Studio.

Você pode encontrar o texto fonte da simulação nas ramificações principal e 2_domain_model do seguinte repositório GitHub:

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

A ramificação principal fornece o modelo inicial para a demonstração, enquanto a ramificação 2_domain_model também contém as fontes criadas na simulação.

Informações detalhadas sobre o conteúdo do repositório e como usá-lo podem ser encontradas aqui.

Assista ao vídeo para ver como capturar um modelo de domínio.