Refatorando classes para utilizar Primary Constructor no .NET 8

Marcio Nizzola
3 min readMay 13, 2024
Refatorando classes para utilizar Primary Constructor no .NET 8

Uma novidade para facilitar a vida do desenvolvedor implementada a partir do .NET 8 é o conceito de construtor primário (Primary constructor).

É simplesmente uma mudança na forma como declaramos classes e structs, montando já na sua declaração um construtor

public readonly class Distance(double dx, double dy)
{
public readonly double Magnitude { get; } = Math.Sqrt(dx * dx + dy * dy);
public readonly double Direction { get; } = Math.Atan2(dy, dx);
}

Observem que na mesma linha onde é feita a declaração da classe, já temos entre parênteses os parâmetros do seu construtor, e as variáveis ali recebidos estarão disponíveis para toda a classe!

Para testar o conceito, resolvi refatorar uma classe de serviços, que tem uma implementação bem tradicional

declaração de uma classe sem o construtor primário

Vejam o detalhe em que temos que ter um construtor (linha 14), onde são recebidos os parâmetros através de injeção de dependência e depois repassados para as variáveis readonly das linhas 12 e 13 nas linhas 16 e 17.

Agora de outra forma, refatorei a mesma classe, utilizando Primary constructor

declaração de uma classe usando o construtor primário

Vejam que com construtor primário, não precisamos ter o construtor como tinhamos antes, e já podemos receber a injeção de dependência no construtor primário (na linha da declaração da classe), outro ponto é que uma vez declarados ali os serviços podem ser utilizados dentro da classe, sem termos que declarar.

Também no caso da configuração onde foi recebido o “IOptions” das credenciais, optei por manter a propriedade na linha 12, passando a referência do objeto recebido no construtor primário.

Muito mais simples não é ? E você, já tentou refatorar suas classes?

Ah, mas isso vai acabar com os construtores ? Não !

utilização de construtores junto com construtor primário

Vejam nesta implementação que podemos ter o construtor primário sim, e também construtores diferentes, porém, seremos obrigados a repassar para o construtor primário os parâmetros através da instrução “this”, caso contrário teremos um problema de compilação.

exemplo de problema sem repassar parâmetros quando usamos construtores primários

Portanto ainda temos a flexibilidade anterior para utilizar construtores tradicionais.

Gostou do artigo? clique no ícone👏e me siga para ver as próximas publicações !! Quer ver mais conteúdos, acesse minhas redes através do Linktree: https://linktree.com/nizzola

Referências:

--

--

Marcio Nizzola

Microsoft MVP | Software Architect na CI&T | Prof. da Etec Itu | Membro Fundador da Comunidade Itu Developers.