Página Inicial > POG > [POG] SendEmail ou EnviarEmail

[POG] SendEmail ou EnviarEmail


Estou dando manutenção em sistema feito em .NET, corrigindo vários bugs e implementando algumas melhorias. Os autores do código não estão mais envolvidos no projeto.

Em uma página de formulário de contato, um e-mail é enviado para a equipe de atendimento e outro para o próprio cliente que preencheu o formulário de contato. Esses e-mails são enviados através de uma classe chamada Utils, através de dois métodos distintos SendEmail e EnviarEmail.

Vamos dar uma olhada no código C# da classe Utils:

public class Utils
{
  public static void SendEmail(string senderEmail, string senderName, string subject, string body, params string[] destinyEmails)
  {
    MailMessage mailMessage = new MailMessage();
    mailMessage.From = new MailAddress(senderEmail, senderName);
    mailMessage.Subject = subject;
    mailMessage.Body = body
    mailMessage.IsBodyHtml = true;

    foreach (string to in destinyEmails)
    {
      mailMessage.To.Add(to);
    }

    SmtpClient smtpClient = new SmtpClient(ConfigurationSettings.AppSettings["Email.Host"]);

    if (!string.IsNullOrEmpty(ConfigurationSettings.AppSettings["Email.User"]))
      smtpClient.Credentials = new System.Net.NetworkCredential(ConfigurationSettings.AppSettings["Email.User"], ConfigurationSettings.AppSettings["Email.Password"]);
    smtpClient.Send(mailMessage);
  }

  public static void EnviarEmail(string pEmail, string pAssunto, string Corpo)
  {
    try
    {
      string emailFrom = ConfigurationSettings.AppSettings["Email.From"];
      string NomeFrom = ConfigurationSettings.AppSettings["Email.Nome.From"];
      Model.Entities.Utils.SendEmail(emailFrom, NomeFrom, pAssunto, Corpo, new string[] { pEmail });
    }
    catch (Exception ex)
    {
      throw new Exception(ex.Message);
    }
  }

  // Outros métodos
}

O método SendEmail até que passa, mas daria para melhorar. Por exemplo, eu colocaria chaves no if da linha 18 para não confundir com a execução da linha 20.

Já o método EnviarEmail, nas linhas 23 a 35, tem uma lista de POGs:

  • Primeira coisa: por que o Pateta criou o método com esse nome? No mínimo esse método seria uma sobrecarga do método SendEmail.
  • O que é esse “p” como prefixo dos dois primeiros parâmetros? É para dizer que é um parâmetro? Nossa, bem mais eficaz que todo o intelisense do Visual Studio.
  • Legal esse terceiro parâmetro chamar Corpo. Esse nome é bem coerente com a convenção de nomenclatura de parâmetros.
  • Nas linhas 27 e 28 a declaração de duas variáveis locais emailFrom e NomeFrom, uma em camel case e outro em pascal case.
  • Na linha 29 uma chamada do método SendEmail com toda a hierarquia de namespace, sendo que o método chamado é da própria classse Utils.
  • Ainda na linha 29, olha que lindo que foi a passagem de parâmetros para: emailFrom, NomeFrom, pAssunto. Cada variável com uma convenção de nomenclatura diferente. O padrão é não seguir nenhum padrão.
  • Mais ainda na linha 29, no último parâmetro o Pateta criou uma array de um único elemento para passar o e-mail de destino da mensagem. No método SendEmail esse parâmetro está definido com a palavra-chave params, que permite que seja passado nenhum valor, um valor, n valores separados por vírgula ou um array.
  • E para finalizar em grande estilo, nas linhas 31 a 34, uma captura de exceção para colocar dentro de outra exceção e lançá-la de novo. Ou seja, só colocou lixo no stack trace.

Se você não conhece POG (Programação Orientada a Gambiarras), leia esse artigo para entender melhor.


POG ,

  1. Nenhum comentário ainda.
  1. Nenhum trackback ainda.