DEV Community

Víctor Fructuoso
Víctor Fructuoso

Posted on

Criando um CRUD do ZERO em .NET usando o Liquid Framework

O Liquid é um framework Open Source desenvolvido pela Avanade, para acelerar o desenvolvimento de aplicações cloud-native em .NET.

Neste artigo, serão utilizadas apenas ferramentas de linha de comando e todos os passos podem ser realizados em qualquer setup que seja compatível com o dotnet (inclusive o artigo foi elaborado usando o WSL2 com Ubuntu)

Para a construção do nosso CRUD vamos começar instalando o Liquid.Templates, que irá nos apoiar no processo de criação do projeto.

Pré-Requisitos

  • .NET 5 (no momento em que este artigo foi escrito esta era a versão mais recente do .NET compatível com o Liquid)

Instalando o Liquid.Templates

dotnet new -i Liquid.Templates
Enter fullscreen mode Exit fullscreen mode

Caso você já possua o Liquid.Templates instalado, recomendo a atualização do mesmo, para garantir que estamos trabalhando com a versão mais atual.

dotnet new --update-apply
Enter fullscreen mode Exit fullscreen mode

Para ter certeza que o Liquid.Templates foi instalado com sucesso vamos executar o seguinte comando:

dotnet new Liquid -l
Enter fullscreen mode Exit fullscreen mode

Como explorar o Liquid.Templates

Caso o template tenha sido instalado corretamente, você deverá ter um retorno semelhante ao apresentado abaixo:

Image description

Na imagem acima, temos a relação de todos os templates que foram instalados com uma breve descrição de cada um deles.

Para este artigo utilizaremos o liquidcrudextsolution.

Vamos então explorar os parâmetros esperados para este template através do comando abaixo:

dotnet new liquidcrudextsolution -h
Enter fullscreen mode Exit fullscreen mode

Será apresentada a seguinte tela:

Image description

Para este template são esperados os seguintes parâmetros:

Parâmetro Descrição
projectName Namespace da Solution
entityName Nome da Entidade
entityIdType Tipo do Id da Entidade

Para começar o processo de criação do micro serviço, vamos criar um diretório chamado "catalogo" e vamos entrar no diretorio.

mkdir catalogo
cd catalogo
Enter fullscreen mode Exit fullscreen mode

Realizando SETUP do Projeto

Neste exemplo o microserviço será chamado "Fructuoso.Exemplo.Catalogo", minha entidade será Produto e o tipo do Id será Guid.

dotnet new liquidcrudextsolution -p Fructuoso.Exemplo.Catalogo -e Produto -en Guid
Enter fullscreen mode Exit fullscreen mode

Após executar o comando acima, a seguinte estrutura de pastas será criada:

📦src
 ┣ 📂Fructuoso.Exemplo.Catalogo.Domain
 ┃ ┣ 📂Entities
 ┃ ┃ ┗ 📜ProdutoEntity.cs
 ┃ ┣ 📜Fructuoso.Exemplo.Catalogo.Domain.csproj
 ┃ ┗ 📜IDomainInjection.cs
 ┣ 📂Fructuoso.Exemplo.Catalogo.WebApi
 ┃ ┣ 📂Controllers
 ┃ ┃ ┗ 📜ProdutoController.cs
 ┃ ┣ 📜Fructuoso.Exemplo.Catalogo.WebApi.csproj
 ┃ ┣ 📜Program.cs
 ┃ ┣ 📜Startup.cs
 ┃ ┗ 📜appsettings.json
 ┗ 📜Fructuoso.Exemplo.Catalogo.Microservice.sln
Enter fullscreen mode Exit fullscreen mode

Antes de seguir, é necessário restaurar as dependêcias da solução. (Em alguns casos sua IDE pode sugerir fazer isso automáticamente para você)

cd src
dotnet restore
Enter fullscreen mode Exit fullscreen mode

Conhecendo a estrutura da solução

O template escolhido criará automaticamente dois projetos WebAPI e Domain.

WebAPI

Neste projeto ficam os controllers e toda a injeção de dependência necessaria, sendo que parte dela já foi criada automaticamente pelo template do Liquid.

Domain

Neste projeto fica toda a regra de negócio necessária para o funcionamento do micro serviço, como estamos utilizando o Liquid CRUD Extension, a regra necessária para a criação de um CRUD básico fica totalmente encapsulada.

Nos próximos artigos veremos como estender esses comportamentos.

Implementação

Depois de explorar um poouco o código gerado automaticamente pelo template é possivel notar que temos 2 TODO para implementar e com a implementação desses dois blocos de código teremos nosso CRUD 100% funcional.

Entidade (ProdutoEntity)

Neste primeiro TODO precisamos apenas definir quais propriedades serão utilizadas.

Para este exemplo vamos criar apenas Código, Nome e Preço.

public class ProdutoEntity : LiquidEntity<Guid>
{
    public int Codigo { get; set; }
    public string Nome { get; set; }
    public double Preco { get; set; }
}
Enter fullscreen mode Exit fullscreen mode

Startup

A classe Startup.cs é responsável pela configuração da nossa WebAPI, seguiremos com o passo a passo sugerido pelo TODO gerado pelo template. Neste artigo faremos uso do InMemory do Entity Framework.

  1. Vamos criar o projeto Repository
dotnet new liquiddbcontextproject --projectName Fructuoso.Exemplo.Catalogo --entityName Produto
Enter fullscreen mode Exit fullscreen mode
  1. Adicione o projeto Repository na solução.
dotnet sln add Fructuoso.Exemplo.Catalogo.Repository/Fructuoso.Exemplo.Catalogo.Repository.csproj
Enter fullscreen mode Exit fullscreen mode
  1. Restaure as dependências do projeto novamente
dotnet restore
Enter fullscreen mode Exit fullscreen mode
  1. Adicione o projeto Repository como referência ao projeto WebAPI
cd Fructuoso.Exemplo.Catalogo.WebApi 
dotnet add reference ../Fructuoso.Exemplo.Catalogo.Repository/Fructuoso.Exemplo.Catalogo.Repository.csproj
Enter fullscreen mode Exit fullscreen mode
  1. Adicione o pacote Microsoft.EntityFrameworkCore.InMemory
dotnet add package Microsoft.EntityFrameworkCore.InMemory --version 5.0.13
Enter fullscreen mode Exit fullscreen mode
  1. Importe a referência do EntityFrameworkCore nesta classe
using Microsoft.EntityFrameworkCore;
Enter fullscreen mode Exit fullscreen mode
  1. Configure o DbContextOptions incluíndo o seguinte código abaixo do TODO (este passo determina o banco de dados que será utilizado pela aplicação)
Action<DbContextOptionsBuilder> options = (opt) => opt.UseInMemoryDatabase("CRUD");
Enter fullscreen mode Exit fullscreen mode
  1. Adicione o pacote Liquid.Repository.EntityFramework
dotnet add package Liquid.Repository.EntityFramework --version 2.*
Enter fullscreen mode Exit fullscreen mode
  1. Importe a referência do Liquid.Repository.EntityFramework.Extensions
using Liquid.Repository.EntityFramework.Extensions;
Enter fullscreen mode Exit fullscreen mode
  1. Importe a referência do Repository nesta classe
using Fructuoso.Exemplo.Catalogo.Repository;
Enter fullscreen mode Exit fullscreen mode
  1. Registre o DbContext no ServiceCollection
services.AddLiquidEntityFramework<LiquidDbContext, ProdutoEntity, Guid>(options);
Enter fullscreen mode Exit fullscreen mode

Executando aplicação

Com o CRUD completamente implementado é hora de executar

dotnet run
Enter fullscreen mode Exit fullscreen mode

Por padrão a aplicação rodará nas portas 5000 (http) e 5001 (https), ao acessar o endereço https://localhost:5001/swagger

Deverá ser apresentada uma tela como esta:

Image description

Encerramento

Como foi possível perceber, para criar um CRUD foi preciso apenas determinar as propriedades da nossa entidade e definir qual o repositório que será utilizado todo o restante do trabalho foi gerado automaticamente.

Por hoje é isso, se você curtiu esse artigo não esqueça de deixar seu like e fique ligado nos proximos posts com mais conteudo sobre o Liquid Framework.

Oldest comments (0)