Qual è la migliore pratica durante l'implementazione di un oggetto di trasferimento dati o POCO? Come dovrebbero apparire i tuoi POCO?

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

  •  10-07-2019
  •  | 
  •  

Domanda

Quale dei seguenti è il modo migliore per implementare un poco?

Opzione 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;}
}

Opzione 2:

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

Quali sono i potenziali vantaggi di ciascun approccio ?? Importa? Alcune persone dicono che un DTO dovrebbe essere impostato solo una volta. È una regola o solo un'opinione ??

È stato utile?

Soluzione

Le opzioni sono leggermente diverse. L'opzione 1 consente di impostare Val1, Val2 una sola volta. L'opzione 2 consente di impostare e ripristinare tali valori.

In generale sono un fan dei costruttori di default pubblici. Rende l'API più facilmente consumabile. Questo è discusso in dettaglio da Krzysztof Cwalina e Brad Abrams nel libro Framework Design Guidelines. Ecco i punti salienti:

  • Usa il modello 'Crea, Imposta, Chiama'. Hanno un costruttore predefinito senza parametri. Quindi consentire alle proprietà di essere impostate sull'oggetto (in qualsiasi ordine). Quindi consentire i metodi da chiamare.
  • Un costruttore predefinito è il metodo canonico di costruzione di oggetti. Questa sarà la prima opzione che l'utente prova.
  • Potrebbe essere difficile forzare un utente a scegliere i parametri in fase di costruzione. Inoltre, alcuni parametri potrebbero essere opzionali.
  • Lascia che l'oggetto rimanga in uno stato non valido per un periodo di tempo limitato. Generare eccezioni per comunicare l'uso improprio dell'API. (Se un oggetto ha due dipendenze, lancia InvalidOperationException se l'utente tenta di chiamare un metodo senza le impostazioni necessarie.)

A mio avviso, l'opzione 2 è la strada da percorrere.

Altri suggerimenti

Con la nuova sintassi di C # in cui puoi fare cose come:

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

puoi tranquillamente utilizzare l'opzione 2.

Controlla qui .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top