Article image
Marcio Andrade
Marcio Andrade19/04/2024 14:19
Share

Conceitos importantes para Arquitetar e Desenvolver usando .Net e C#

  • #C#
  • #Arquitetura de Sistemas

Muitas vezes encontramos vários tipos de classes que representam conceitos diferentes dentro de nossos aplicativos. Compreender as distinções entre objetos de domínio, entidades, DTOs (Data Transfer Objects) e modelos é crucial para projetar sistemas robustos e de fácil manutenção. Neste artigo, veremos cada um desses conceitos, explorando suas funções e alguns exemplos práticos para descrever os usos em uma aplicação.

1. Objetos de domínio:

Definição: Os objetos de domínio representam entidades ou conceitos do mundo real dentro do domínio do problema de um aplicativo. Eles encapsulam lógica de negócios e comportamentos relacionados a aspectos específicos do domínio.

Exemplo:

public class Produto
{
  public int Id { get; set; }
  public string Nome { get; set; }
  public decimal Preco { get; set; }

  public bool EmEstoque()
  {
   // Lógica de negócios que descreve se ha Produto no Estoque
  }
}

2. Entidades:

Definição: Entidades são objetos que têm uma identidade e um ciclo de vida distintos dentro de um aplicativo. Eles normalmente são persistentes e servem para serem manipulados em um banco de dados. Representam as estruturas de dados principais do aplicativo.

Exemplo:

public class Consumidor
{
  public int Id { get; set; }
  public string Nome { get; set; }
  public string Email { get; set; }
  // Outras propriedades/atributos e/ou métodos
}

3. DTOs (Data Objects Transfer - Objetos de Transferência de Dados):

Definição: DTOs são objetos leves usados para transferir dados entre diferentes camadas de um aplicativo, como entre a camada de apresentação e a camada de lógica de negócios. Eles geralmente espelham a estrutura de objetos ou entidades de domínio, mas podem conter apenas os dados necessários para uma operação específica.

Exemplo:

public class PedidoDto
{
  public int PedidoId { get; set; }
  public DateTime PedidoData { get; set; }
  public decimal Total { get; set; }
  // Outras propriedades que forem necessárias
}

4. Modelos:

Definição: Modelos são objetos que representam a estrutura e o estado dos dados dentro de um aplicativo. Eles podem incluir uma combinação de objetos de domínio, entidades, DTOs ou outras estruturas de dados.

Exemplo:

public class ProdutoViewModel
{
  public int Id { get; set; }
  public string NomeProduto { get; set; }
  public decimal Preco { get; set; }
  // Outras propriedades que forem necessárias
}

Estudo de caso

O primeiro passo, é entender e compreender o fluxo dos casos de uso envolvidos.

Vamos considerar um cenário do mundo real em que uma plataforma de comércio eletrônico processa pedidos em tempo real. Examinaremos diferentes aspectos do fluxo de trabalho de processamento de pedidos e categorizaremos de acordo com objetos de domínio, entidades, DTOs (Objetos de Transferência de Dados) e modelos.

1. Objetos de domínio:

Os objetos de domínio representam entidades ou conceitos-chave dentro do domínio de comércio eletrônico, encapsulando lógica e comportamentos de negócios.

  • Produto: Representa produtos individuais disponíveis para compra, incluindo propriedades como nome, preço e disponibilidade.
  • Ordem: Representa o pedido de um cliente, contendo detalhes como ID do pedido, informações do cliente e itens do pedido.
  • Cliente: Representa um cliente registrado, incluindo propriedades como nome, e-mail e endereço de entrega.

2. Entidades:

Entidades são objetos que têm uma identidade distinta e são persistentes em um banco de dados.

  • PedidoEntity: Representa os dados do pedido armazenados no banco de dados, mapeando para a tabela de pedidos e contendo propriedades como ID do pedido, ID do cliente e status do pedido.
  • ProdutoEntity: Representa os dados do produto armazenados no banco de dados, mapeando para a tabela do produto e contendo propriedades como ID do produto, nome e preço.
  • ClienteEntity: Representa os dados do cliente armazenados no banco de dados, mapeando para a tabela do cliente e contendo propriedades como ID do cliente, nome e email.

3. DTOs (Objetos de Transferência de Dados):

DTOs são objetos leves usados para transferir dados entre diferentes camadas do aplicativo.

  • PedidoDto: Contém um subconjunto de dados de ordem usados para transferir informações de ordem entre a camada de apresentação e a camada de lógica de negócios. Ele pode incluir propriedades como ID do pedido, nome do cliente e valor total.
  • ProdutoDto: Contém dados do produto usados para transferir informações do produto entre camadas, incluindo propriedades como ID do produto, nome e preço.
  • ClienteDto: Contém dados do cliente que serão usados para transferir informações do cliente entre camadas, incluindo propriedades como ID do cliente, nome e email.

4. Modelos:

Os modelos representam a estrutura e o estado dos dados dentro do aplicativo, combinando objetos de domínio, entidades, DTOs ou outras estruturas de dados.

  • PedidoViewModel: Representa os dados do pedido usados para fins de apresentação, contendo propriedades como ID do pedido, nome do cliente, data do pedido e status do pedido.
  • ProdutoViewModel: Representa os dados do produto usados para apresentação, incluindo propriedades como ID do produto, nome, preço e disponibilidade.
  • ClienteViewModel: Representa os dados do cliente que são usados para apresentação, contendo propriedades como ID do cliente, nome, email e endereço de entrega.

Conclusão:

A escolha da Arquitetura sempre será projetada conforme requisitos e uma análise apurada (dependerá muito de cada caso). A intenção deste texto é explicar alguns conceitos importantes, descrever e exemplificar distinções e objetivos entre Objetos de Domínio, Entidades, DTOs e Modelos. Entender estes conceitos, são essenciais para projetar softwares C# bem estruturados e de fácil manutenção. Cada tipo atende uma finalidade específica dentro da arquitetura, encapsulando a lógica de negócio, separando responsabilidades, representando entidades do banco de dados, transferindo dados entre as camadas do sistema ou modelando dados para apresentação. O uso desses conceitos adequadamente, podemos criar aplicações robustas, escalonáveis que atendam aos requisitos de seu domínio.

BIBLIOGRAFIA

MARTIN, Robert C.; GRENNING, James; BROW, Simon. Arquitetura Limpa: o guia do artesão para estrutura e design de software. Rio de Janeiro: Alta Books Editora, 2019. Tradução de: Samantha Batista.  

Share
Comments (4)

JN

João Nogueira - 19/04/2024 23:34

Conteúdo muito bom, sempre gosto de revisar esses conceitos de arquitetura e busco saber como outros devs estão desenvolvendo suas arquiteturas de projetos.


Parabéns pelo excelente trabalho

Caroline Freitas
Caroline Freitas - 19/04/2024 16:13

Excelente conteudo... valei

AV

Angelica Viecelli - 19/04/2024 15:59

Material muito bem elaborado, parabéns!

Fernando Teixeira
Fernando Teixeira - 19/04/2024 15:44

Excelente conteúdo!