Ho una funzione che crea un nuovo oggetto passando agli ID dei numeri interi del costruttore principalmente con valori di 0 . Questa funzione viene chiamata quando si salva un nuovo record creato (non una modifica).
public class RecordController
{
private int _recordId;
private int _subRecordId;
private string _xmlData;
private SubRecordA CreateSubRecordA()
{
_xmlData = LoadXmlData();
ParseXmlData();
return new SubRecordA(
SubRecordTypeId.A // leaky DAL abstraction
0,
0,
_xmlData);
}
}
Tuttavia, i due parametri 0
coincidono con i campi privati già inizializzati a 0
in un metodo Init()
private void Init()
{
_recordId = 0;
_subRecordId = 0;
}
Non sono sicuro se sia meglio passare esplicitamente questi campi con valore zero al costruttore SubRecordA's
?
return new SubRecordA(
SubRecordTypeId.A // leaky DAL abstraction
_recordId,
_subRecordId,
_xmlData);
Il passaggio del letterale 0
sembra più chiaro su quale sia l'intenzione, ma sembra anche indebolire la logica escludendo questi campi dal suo flusso (ad esempio, _recordId
viene inizializzato con un -1
ad un certo punto nel futuro).
Aggiorna
Usando il suggerimento di Robert Harvey per far sì che il costruttore predefinito azzeri le proprietà / campi, ho creato un costruttore esplicito che accetta solo i parametri richiesti e chiama : this()
public class SubRecordA : SubRecord
{
public override int SubRecordTypeId { get {return (int)SubRecordTypeId.A; } }
public int ParentRecordId { get; set; }
public int RecordId { get; set; }
public string XmlData { get; set; }
public SubRecordA(string xmlData) : this()
{
//SubRecordTypeId = SubRecordTypeId.A;
XmlData = xmlData;
}
}