Passare gli 0 (letterali) a un costruttore

0

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;
    }
}
    
posta samis 04.04.2018 - 17:46
fonte

1 risposta

1

Il tuo problema di fondo è che 0 è un valore errato per l'ID

Idealmente dovresti cambiarli in GUID, ma un secondo migliore sarebbe cambiarli in Uti nullable.

Ciò ti consentirebbe di impostarli su null fino a quando l'oggetto non fosse stato mantenuto e avesse ottenuto gli ID effettivi

    
risposta data 04.04.2018 - 20:41
fonte