6 maneiras de fazer a mesma coisa, o que é considerado boas práticas?

As vezes tem tantas maneiras diferentes de fazer o mesmo código que nós ficamos na dúvida quanto a qual maneira usar. O que seria considerado "boa prática" pela comunidade e o que sua equipe entenderia melhor. Suponhamos que você esteja trabalhando dentro de um método de um Domain Service chamado UmDomainServiceChique(objetoDoDominio) que será chamado por uma API. Você tem uma regra de negócio chique para ser verificada que por enquanto chamarei de VerificaMinhaRegraChiqueComplexa(). Você chama UmDomainServiceChique(objetoDoDominio) e caso VerificaMinhaRegraChiqueComplexa() retorne true você vai querer que UmDomainServiceChique faça o que tem que fazer e a api retornar Ok 200, caso contrário você quer que a API responda um erro qualquer, tipo BadRequest, e retornar uma mensagem dizendo que VerificaMinhaRegraChiqueComplexa deu ruim. Eu vejo 6 maneiras de fazer isso, gostaria de saber a opinião de outrs devs sobre qual seria a maneira menos gambiarr

Listar todas as culturas do .net e a configuração corrente

Lidar com culture sempre é um problema, e a conversão de datas e números para strings e vice-versa é pior ainda se o seu sistema permite que usuários de múltiplas culturas imputem a informação da maneira a que estão habituados, ou se você tem dados sensíveis à cultura gravados em campos verchar do banco de dados.
 É importante que as formatações de dados sejam aplicadas à cultura apenas na exibição do dado, mas nunca no seu processamento e armazenamento. Ao gravar no banco de dados, grave sempre o dado bruto em seu formato e tipo de dado padrão (double, integer, datetime etc) usando para isso parâmetros tipados ou o Entity Framework, ou ainda o nHibernate.
 Quando necessário armazenar, por exemplo, uma data como string, então opte por um formato reconhecido internacionalmente, como o padrão ODBC: yyyy-MM-dd (2013-12-02).
Abaixo um programinha console que lista todas as Cultures disponíveis e mostra qual é a corrente configurada no .net.

using System;
using System.Collections.Generic;
using System.Text;
using System.Globalization;

namespace CultureList
{
    class Program
    {
        static void Main(string[] args)
        {

            // get culture names
            List list = new List();
            foreach (CultureInfo ci in CultureInfo.GetCultures(CultureTypes.AllCultures))
            {
                string specName = "(none)";
                try { 
                    specName = CultureInfo.CreateSpecificCulture(ci.Name).Name;
                    list.Add(String.Format("{0,-12}\t{1,-12}\t{2,-40}\t{3}\t{4}\t{5}\t{6}", 
                        ci.Name, 
                        specName, 
                        ci.EnglishName, 
                        ci.NumberFormat.NumberGroupSeparator,
                        ci.NumberFormat.NumberDecimalSeparator, 
                        ci.NumberFormat.CurrencyGroupSeparator, 
                        ci.NumberFormat.CurrencyDecimalSeparator));
                }
                catch { }

                
            }

            list.Sort();  // sort by name

            // write to console
            Console.WriteLine("CULTURE\tSPEC.CULTURE\tENGLISH NAME\tN-GROUP\tN-DECIMAL\tM-GROUP\tM-DECIMAL");
            Console.WriteLine("--------------------------------------------------------------");
            foreach (string str in list)
                Console.WriteLine(str);

   Console.WriteLine("");  
   Console.WriteLine("");    
            Console.WriteLine("Informações de cultura corrente:");
            Console.WriteLine("--------------------------------------------------------------");    
            Console.WriteLine("System.Globalization.CultureInfo.CurrentCulture -->" + System.Globalization.CultureInfo.CurrentCulture);
            Console.WriteLine("System.Globalization.CultureInfo.CurrentUICulture -->" + System.Globalization.CultureInfo.CurrentUICulture);
            Console.WriteLine("System.Globalization.CultureInfo.InstalledUICulture -->" + System.Globalization.CultureInfo.InstalledUICulture);

            Console.ReadLine();

        }
    }
}

Código disponível aqui

Comentários

Postagens mais visitadas deste blog

Uso de memória no SQL Server

Busca de CEP com o Lazarus - Parte 1 - UrlEncode

Botão Add This para adicionar seu post em qualquer rede