[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
emailFromeNomeFrom, uma em camel case e outro em pascal case.
- Na linha 29 uma chamada do método
SendEmailcom toda a hierarquia de namespace, sendo que o método chamado é da própria classseUtils.
- 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
SendEmailesse parâmetro está definido com a palavra-chaveparams, 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.




Comentários