Melhore seu código — parte 4 — Métodos com muitos parâmetros

Marcio Nizzola
3 min readSep 27, 2024

--

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

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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

--

--

Marcio Nizzola

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