Stile di codifica: restituisce l'oggetto o imposta le proprietà esposte

-2

Ho due stili di codifica:

public class Age
{
    public double AgeYear { get;}
    public double AgeInDays {get;}
    public Person GetAge()
    {
      int x;
      //implementation that calculates AgeYear and AgeInDays

      return this;
    }
}

Age a = new Age();
Age a1 = a.GetAge();

Seconda implementazione:

public class Age
{
    public double Age { get; set; }
    public double AgeInDays { get;set; }

    public void CalculateAge()
    {
      int x;
      //implementation that calculates Age and AgeInDays
      Age = x;
      AgeInDays = Age * 365;
    }
}

Age a = new Age();
a.CalculateAge();
double age = a.Age;
double ageInDays = a.AgeInDays;

Questo è solo un semplice esempio. Cosa preferisci: modifica le proprietà dell'oggetto nel metodo void e esponi le proprietà pubbliche o chiama un metodo che restituisce l'oggetto stesso.

    
posta user2457382 22.03.2016 - 22:25
fonte

1 risposta

5

Non dovresti usare nessuno dei due stili!

In entrambi i modi in cui lo hai, il tuo oggetto è spesso in uno stato discutibile, e non è affatto ovvio che lo sia. Spesso, dovresti sforzarti di seguire il principio del minimo stupore.

Ogni volta che hai ottieni proprietà, l'accesso a quelle dovrebbe essere quasi sempre un'operazione legittima con i risultati attesi. Restituire la spazzatura finché non viene richiamata un'altra funzione è inattesa.

Se calcolare l'età è un'operazione costosa, non dovresti avere nessuna delle proprietà di età e dovresti restituirle tramite il metodo CalculateAge (), in due metodi diversi o con un'altra classe per portare i loro valori calcolati. In entrambi i casi dovrebbero essere nominati come tali che è chiaro che la funzione sta facendo un po 'di sollevamento e non solo sputando un valore di variabili salvate.

Se calcolare l'età è economico, calcolarlo immediatamente quando si accede alla proprietà. In nessun caso dovresti dipendere dall'avere qualche altra funzione configurata per te.

Ci si aspetta che i getter siano operazioni veloci, economiche e sicure. Se i valori a cui stanno fornendo l'accesso non sono sempre in uno stato valido, non dovresti averli.

    
risposta data 22.03.2016 - 22:48
fonte

Leggi altre domande sui tag