DEV Community

Víctor Fructuoso
Víctor Fructuoso

Posted on

1

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.

Image of Timescale

🚀 pgai Vectorizer: SQLAlchemy and LiteLLM Make Vector Search Simple

We built pgai Vectorizer to simplify embedding management for AI applications—without needing a separate database or complex infrastructure. Since launch, developers have created over 3,000 vectorizers on Timescale Cloud, with many more self-hosted.

Read more

Top comments (0)

Postmark Image

Speedy emails, satisfied customers

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up