Olá, Luccas.
Tudo bem?
1. Lógica na Propriedade Idade
para Calcular a Idade com Base na Data de Nascimento
Para calcular a idade com base na data de nascimento e garantir que a propriedade seja imutável, você pode usar uma propriedade calculada. Veja como você pode fazer isso:
public record DadosDto(string Nome, string Sobrenome, DateTime DataNascimento)
{
public string Endereco { get; init; }
public int Idade => DateTime.Now.Year - DataNascimento.Year -
(DateTime.Now.DayOfYear < DataNascimento.DayOfYear ? 1 : 0);
}
Neste exemplo, Idade
é uma propriedade calculada que não pode ser alterada diretamente, garantindo a imutabilidade.
2. Uso de enum
como Propriedade em um record
Você pode usar enum
como propriedade em um record
, e é possível definir a lógica no construtor para determinar o valor da enumeração com base em outra propriedade. No entanto, lembre-se de que, para manter a imutabilidade, as propriedades devem ser init
ou somente leitura.
Aqui está um exemplo de como você pode fazer isso:
public enum Categoria
{
Receita,
Despesa
}
public record DadosDto(decimal Valor)
{
public Categoria Categoria { get; init; } = Valor > 0 ? Categoria.Receita : Categoria.Despesa;
}
Neste exemplo, Categoria
é inicializada com base no valor de Valor
e não pode ser alterada após a criação do objeto.
Construtor Vazio para Acesso a Bancos de Dados
Se você precisar de um construtor vazio para acesso a bancos de dados, você pode usar um record class
em vez de um record
padrão, pois ele permite a definição de um construtor vazio. No entanto, isso pode comprometer a imutabilidade, então use com cuidado.
public record class DadosDto
{
public string Nome { get; init; }
public string Sobrenome { get; init; }
public string Endereco { get; init; }
public DateTime DataNascimento { get; init; }
public int Idade => DateTime.Now.Year - DataNascimento.Year -
(DateTime.Now.DayOfYear < DataNascimento.DayOfYear ? 1 : 0);
public DadosDto() { } // Construtor vazio para ORM
public DadosDto(string nome, string sobrenome, DateTime dataNascimento)
{
Nome = nome;
Sobrenome = sobrenome;
DataNascimento = dataNascimento;
}
}
Seria isso? Espero ter ajudado. Qualquer coisa manda aqui de novo.
Bons estudos!