Domine C# 13: Design Patterns e Arquitetura Limpa!

Neste tutorial, vamos explorar como Design Patterns podem ser aplicados em conjunto com os recursos do C# 13O que é C# 13 e por que aprender em 90 minutosO que é C# 13 e por que aprender em 90 minutosExplore as inovações do C# 13 e melhore a legibilidade do seu código. Este tutorial prático de 90 minutos oferece dicas essenciais para desenvolvedores .NET. para atingir uma arquitetura limpa e sustentável. A proposta aqui é mostrar exemplos práticos que evidenciem a facilidade de manutenibilidade, legibilidade e escalabilidade do seu código.

Visão Geral de Arquitetura Limpa🔗

A Arquitetura Limpa (também conhecida como Clean Architecture) é pautada em princípios que garantem baixo acoplamento e alta coesão, permitindo a evolução do sistema sem acúmulo de dívidas técnicas. Em linhas gerais:

  • Dependências internas: o domínio (regras de negócio) deve se manter independente de detalhes externos (ex.: repositórios de dados).
  • Isolamento: cada camada tem responsabilidade clara (aplicação, domínio, infraestrutura).
  • Testabilidade: o código deve ser facilmente testável, permitindo TDD e outras práticas de QA.

Ao unir esses conceitos com Design Patterns, obtemos soluções padronizadas para problemas recorrentes em desenvolvimento de software, facilitando a manutenção e a evolução do projeto.

Benefícios de Combinar Design Patterns com C# 13🔗

O C# 13O que é C# 13 e por que aprender em 90 minutosO que é C# 13 e por que aprender em 90 minutosExplore as inovações do C# 13 e melhore a legibilidade do seu código. Este tutorial prático de 90 minutos oferece dicas essenciais para desenvolvedores .NET. traz melhorias que tornam a aplicação de Design Patterns ainda mais fluida:

Esses recursos funcionam muito bem com uma arquitetura em camadas, principalmente ao dividir responsabilidades e isolar dependências de forma intuitiva.

Exemplos de Design Patterns com C# 13🔗

A seguir, apresentamos alguns Design Patterns populares e como eles podem se beneficiar das novidades do C# 13O que é C# 13 e por que aprender em 90 minutosO que é C# 13 e por que aprender em 90 minutosExplore as inovações do C# 13 e melhore a legibilidade do seu código. Este tutorial prático de 90 minutos oferece dicas essenciais para desenvolvedores .NET..

Singleton com Partial e Global Using

O Singleton garante que apenas uma instância de uma classe exista na aplicação. Podemos separar em diferentes arquivos partes relacionadas à inicialização e ao uso de recursos estáticos, facilitado pelas classesBoas práticas de performance e memória para jogos em C# 13Boas práticas de performance e memória para jogos em C# 13Descubra técnicas para otimizar desempenho e uso de memória em jogos com C# 13, utilizando structs, pooling e melhores práticas do GC. parciais do C# 13O que é C# 13 e por que aprender em 90 minutosO que é C# 13 e por que aprender em 90 minutosExplore as inovações do C# 13 e melhore a legibilidade do seu código. Este tutorial prático de 90 minutos oferece dicas essenciais para desenvolvedores .NET..

// File: GlobalUsings.cs
global using System;
// File: Logger.Singleton.part1.cs
namespace MyApp.Logging
{
    public static partial class Logger
    {
        private static readonly object _lock = new();
        private static Logger? _instance;
        public static Logger Instance
        {
            get
            {
                if (_instance is null)
                {
                    lock (_lock)
                    {
                        if (_instance is null)
                        {
                            _instance = new Logger();
                        }
                    }
                }
                return _instance;
            }
        }
    }
}
// File: Logger.Singleton.part2.cs
namespace MyApp.Logging
{
    public static partial class Logger
    {
        private Logger() { /* Evita instanciação externa */ }
        public void LogInfo(string message)
        {
            Console.WriteLine($"[INFO] {message}");
        }
    }
}

Pontos de destaque:

Strategy com Pattern Matching

O Strategy permite alterar comportamentos dinamicamente em tempo de execução, delegando a variação a classesBoas práticas de performance e memória para jogos em C# 13Boas práticas de performance e memória para jogos em C# 13Descubra técnicas para otimizar desempenho e uso de memória em jogos com C# 13, utilizando structs, pooling e melhores práticas do GC. específicas. Graças ao Pattern MatchingDesenvolvimento multiplataforma com .NET MAUI e C# 13Desenvolvimento multiplataforma com .NET MAUI e C# 13Explore as novidades do C# 13 e crie apps multiplataforma com .NET MAUI neste tutorial prático, otimizado para desempenho e legibilidade. em C# 13O que é C# 13 e por que aprender em 90 minutosO que é C# 13 e por que aprender em 90 minutosExplore as inovações do C# 13 e melhore a legibilidade do seu código. Este tutorial prático de 90 minutos oferece dicas essenciais para desenvolvedores .NET., o código fica mais legível ao definir comportamentos conforme o tipo de strategy.

// Exemplos de comportamento das estratégias
public interface IDiscountStrategy
{
    decimal ApplyDiscount(decimal amount);
}
public class NoDiscount : IDiscountStrategy
{
    public decimal ApplyDiscount(decimal amount) => amount;
}
public class PercentageDiscount : IDiscountStrategy
{
    private readonly decimal _percentage;
    public PercentageDiscount(decimal percentage) => _percentage = percentage;
    public decimal ApplyDiscount(decimal amount) => amount - (amount * _percentage);
}
// Uso do Strategy com Pattern Matching
public class CheckoutService
{
    public decimal FinalPrice(decimal amount, IDiscountStrategy strategy)
    {
        return strategy switch
        {
            NoDiscount => amount,
            PercentageDiscount disc => disc.ApplyDiscount(amount),
            _ => amount
        };
    }
}

Pontos de destaque:

Diagrama de Classes Exemplo🔗

Abaixo, um diagrama em Mermaid para ilustrar a interação entre CheckoutService e suas Strategies:

classDiagram class IDiscountStrategy { +ApplyDiscount(decimal) : decimal } class NoDiscount { +ApplyDiscount(decimal) : decimal } class PercentageDiscount {
  • decimal _percentage
+ApplyDiscount(decimal) : decimal } class CheckoutService { +FinalPrice(decimal, IDiscountStrategy) : decimal } IDiscountStrategy <|-- NoDiscount IDiscountStrategy <|-- PercentageDiscount CheckoutService -- IDiscountStrategy

Aplicando SOLID com C# 13🔗

Os princípios SOLID (Single Responsibility, Open/Closed, Liskov Substitution, InterfaceTrabalhando com interfaces e coleções aprimoradas em C# 13Trabalhando com interfaces e coleções aprimoradas em C# 13Descubra como as implementações padrão em interfaces e coleções aprimoradas do C# 13 otimizam a criação de códigos modulares, seguros e performáticos. Segregation, Dependency Inversion) servem como base para uma boa arquitetura. O C# 13, com records, classesBoas práticas de performance e memória para jogos em C# 13Boas práticas de performance e memória para jogos em C# 13Descubra técnicas para otimizar desempenho e uso de memória em jogos com C# 13, utilizando structs, pooling e melhores práticas do GC. parciais e melhorias no pattern matchingDesenvolvimento multiplataforma com .NET MAUI e C# 13Desenvolvimento multiplataforma com .NET MAUI e C# 13Explore as novidades do C# 13 e crie apps multiplataforma com .NET MAUI neste tutorial prático, otimizado para desempenho e legibilidade., ajuda a manter:

Boas Práticas para Arquitetura Limpa🔗

1. Modularize: mantenha separadas as responsabilidades em diferentes projetos ou namespacesIntrodução aos principais namespaces e bibliotecas padrãoIntrodução aos principais namespaces e bibliotecas padrãoExplore um tutorial prático sobre C# 13, descobrindo os namespaces e bibliotecas da BCL. Melhore a performance e legibilidade do seu código..

2. Use Features Modernas do C# 13O que é C# 13 e por que aprender em 90 minutosO que é C# 13 e por que aprender em 90 minutosExplore as inovações do C# 13 e melhore a legibilidade do seu código. Este tutorial prático de 90 minutos oferece dicas essenciais para desenvolvedores .NET.: pattern matchingDesenvolvimento multiplataforma com .NET MAUI e C# 13Desenvolvimento multiplataforma com .NET MAUI e C# 13Explore as novidades do C# 13 e crie apps multiplataforma com .NET MAUI neste tutorial prático, otimizado para desempenho e legibilidade., global usingUso aprimorado de 'global using' e importações simplificadas no C# 13Uso aprimorado de 'global using' e importações simplificadas no C# 13Explore as inovações do C# 13: aprenda a utilizar global using para reduzir repetições e modernizar seu projeto com eficiência e clareza. e records tornam seu código mais conciso.

3. Mantenha Sustentabilidade: classes parciais ajudam a organizar código extenso, evitando “mega classesBoas práticas de performance e memória para jogos em C# 13Boas práticas de performance e memória para jogos em C# 13Descubra técnicas para otimizar desempenho e uso de memória em jogos com C# 13, utilizando structs, pooling e melhores práticas do GC.”.

4. Valide Dependências: cada camada deve conhecer apenas a que está imediatamente abaixo, seguindo princípios de Clean Architecture.

5. Teste Sempre: patterns como Strategy ou Factory ficam mais confiáveis com testes unitários, garantindo a segurança das alterações.

Conclusão🔗

Ao combinar C# 13O que é C# 13 e por que aprender em 90 minutosO que é C# 13 e por que aprender em 90 minutosExplore as inovações do C# 13 e melhore a legibilidade do seu código. Este tutorial prático de 90 minutos oferece dicas essenciais para desenvolvedores .NET. com Design Patterns dentro de uma Arquitetura Limpa, ganha-se:

Comece aos poucos, substituindo seções de código legadas por patterns adequados e utilize as melhorias do C# 13O que é C# 13 e por que aprender em 90 minutosO que é C# 13 e por que aprender em 90 minutosExplore as inovações do C# 13 e melhore a legibilidade do seu código. Este tutorial prático de 90 minutos oferece dicas essenciais para desenvolvedores .NET. para manter seu projeto enxuto, organizado e eficiente.

Dica: pratique a refatoração de classes em projetos já existentes para ver rapidamente como o pattern matching e as classes parciais podem simplificar seu fluxo de trabalho.

Com esses conceitos, você poderá explorar de forma eficaz o potencial do C# 13O que é C# 13 e por que aprender em 90 minutosO que é C# 13 e por que aprender em 90 minutosExplore as inovações do C# 13 e melhore a legibilidade do seu código. Este tutorial prático de 90 minutos oferece dicas essenciais para desenvolvedores .NET., aliando Design Patterns a uma Arquitetura Limpa e tornando-se ainda mais produtivo no desenvolvimento de soluções robustas e escaláveis.

Autor: Marcelo V. Souza - Engenheiro de Sistemas e Entusiasta em IoT e Desenvolvimento de Software, com foco em inovação tecnológica.

Referências🔗

  • Documentação oficial do C# que aborda os recursos e novidades do C# 13, sendo diretamente relevante para demonstrar as funcionalidades e exemplos apresentados no tutorial: docs.microsoft.com/pt-br/dotnet/csharp/

Compartilhar artigo

Artigos Relacionados