Qual é a melhor prática ao implementar um objeto de transferência de dados ou POCO? Como seus pocos devem ser?

StackOverflow https://stackoverflow.com/questions/636030

  •  10-07-2019
  •  | 
  •  

Pergunta

Qual das alternativas a seguir é a melhor maneira de implementar um POCO?

Opção 1:

public class PocoOption1
{
  public PocoOption1(int val1,string val2)
  {
    Val1=val1; Val2=val2;
  }

  public int Val1{get;private set;}
  public int Val2{get;private set;}
}

Opção 2:

public class PocoOption2
{           
  public int Val1{get;set;}
  public int Val2{get;set;}
}

Quais são os profissionais potenciais de cada abordagem? Isso importa? Algumas pessoas dizem que um DTO deve ser definido apenas uma vez. É uma regra ou apenas uma opinião ??

Foi útil?

Solução

As opções são um pouco diferentes. A opção 1 permite definir Val1, Val2 apenas uma vez. A Opção 2 permite que você defina e redefine esses valores.

Em geral, sou fã de construtores de padrão público. Torna a API mais facilmente consumida. Isso é discutido em alguns detalhes por Krzysztof Cwalina e Brad Abrams no livro Diretrizes de design da estrutura. Aqui estão os destaques:

  • Use o padrão 'Criar, definir, chamar'. Tenha um construtor padrão sem parâmetros. Em seguida, permita que as propriedades sejam definidas no objeto (em qualquer ordem). Em seguida, permita que os métodos sejam chamados.
  • Um construtor padrão é o método canônico de construção de objetos. Esta será a primeira opção que o usuário tenta.
  • Forçar um usuário a escolher parâmetros no tempo de construção pode ser difícil. Além disso, alguns parâmetros podem ser opcionais.
  • Deixe seu objeto estar em um estado inválido por um período limitado de tempo. Jogue exceções para comunicar o uso indevido da API. (Se um objeto tiver duas dependências, jogue o invalidoPerationException se o usuário tentar chamar um método sem as configurações necessárias.)

Na minha opinião, a opção 2 é o caminho a percorrer.

Outras dicas

Com a nova sintaxe C#, onde você pode fazer coisas como:

Customer customer =  new Customer{ Id = 1, 
     Name="Dave",                                             
     City = "Sarasota" };

Você pode usar com segurança a opção 2.

por favor, verifique aqui.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top