Melhore seu código — parte 4 — Métodos com muitos parâmetros
Continuando a nossa série de melhorias de código:
Parte 1 — Melhore seu código C# — parte 2 — tem “if” demais no código !
Parte 2 — Melhore seu código c# — parte 1 — a regra do escoteiro!
Parte 3 — Melhore seu código — parte 3 — expressões lambda | by Marcio Nizzola | Sep, 2024 | Medium
Agora vamos falar de um problema bem comum:
Métodos com muitos parâmetros
Quantas vezes temos métodos com número alto de parâmetros, e estes parâmetros acabam dificultando a análise e também confundindo quem está tentando observar o que aquele código faz.
Exemplo de método para otimizar:
public void ProcessOrder(int orderId, string customerName, string address, string phone, string email,
string paymentMethod, decimal amount, DateTime orderDate, bool isExpressDelivery)
{
// Código para processar o pedido
}
// Chamada do método com muitos parâmetros
ProcessOrder(123, "Darth Vader", "123 Death Star", "555-5555", "vader@empire.com",
"Credit Card", 99.99m, DateTime.Now, true);
Problemas com essa abordagem:
- Dificuldade de Leitura: É difícil saber o que cada valor representa ao passar tantos parâmetros.
- Manutenção Complexa: Se precisar adicionar mais parâmetros ou alterar a ordem, pode introduzir erros.
- Dificuldade em Reusar Dados: Para reutilizar os mesmos dados em outro método, é necessário passar todos os parâmetros novamente.
Como podemos otimizar?
- Passo 1: criando uma classe ou record para inserir os dados
public class OrderData
{
public int OrderId { get; set; }
public string CustomerName { get; set; }
public string Address { get; set; }
public string Phone { get; set; }
public string Email { get; set; }
public string PaymentMethod { get; set; }
public decimal Amount { get; set; }
public DateTime OrderDate { get; set; }
public bool IsExpressDelivery { get; set; }
}
- Passo 2: refatorando o método para receber a classe como parâmetro:
public void ProcessOrder(OrderData orderData)
{
// Código para processar o pedido usando orderData
}
- Passo 3: Executando a chamada para o método
OrderData order = new OrderData
{
OrderId = 123,
CustomerName = "Darth Vader",
Address = "123 Death Star",
Phone = "555-5555",
Email = "vader@empire.com",
PaymentMethod = "Credit Card",
Amount = 99.99m,
OrderDate = DateTime.Now,
IsExpressDelivery = true
};
// Nova Chamada do método otimizado com o objeto OrderData
ProcessOrder(order);
Benefícios da Nova Abordagem
- Legibilidade: A chamada do método agora é muito mais clara e fácil de entender, pois usamos um objeto que encapsula todas as informações.
- Antes, era difícil entender o que cada parâmetro representava apenas olhando para a chamada. Agora, as propriedades do objeto
OrderData
descrevem os dados de forma explícita. - Extensibilidade: Para adicionar novas informações ao pedido (por exemplo, um campo “Discount”), basta incluir uma nova propriedade na classe
OrderData
, sem alterar a assinatura do método. Isso simplifica a manutenção. - Reuso de Dados: Se precisar reutilizar os mesmos dados do pedido em outra parte do código, basta passar a instância do objeto
OrderData
para outro método, evitando repetição de código. - Segurança contra Erros: A probabilidade de passar os parâmetros na ordem errada ou esquecer algum dado é eliminada, já que agora usamos um único objeto.
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