Stiamo effettuando molti test unitari e refactoring dei nostri oggetti di business e sembra che io abbia opinioni molto diverse sul design di classe rispetto ad altri colleghi.
Un esempio di classe di cui non sono fan:
public class Foo
{
private string field1;
private string field2;
private string field3;
private string field4;
private string field5;
public Foo() { }
public Foo(string in1, string in2)
{
field1 = in1;
field2 = in2;
}
public Foo(string in1, string in2, string in3, string in4)
{
field1 = in1;
field2 = in2;
field3 = in3;
}
public Prop1
{ get { return field1; } }
{ set { field1 = value; } }
public Prop2
{ get { return field2; } }
{ set { field2 = value; } }
public Prop3
{ get { return field3; } }
{ set { field3 = value; } }
public Prop4
{ get { return field4; } }
{ set { field4 = value; } }
public Prop5
{ get { return field5; } }
{ set { field5 = value; } }
}
Nella classe "reale", non sono tutte stringhe, ma in alcuni casi abbiamo 30 campi di supporto per proprietà completamente pubbliche.
Io odio questa classe, e non so se sto solo essere pignoli. Alcune cose da notare:
- I campi di supporto privati senza logica nelle proprietà sembrano inutili e gonfiano la classe
- Costruttori multipli (un po 'ok) ma accoppiati a
- tutte le proprietà hanno un setter pubblico, non sono un fan.
- Potenzialmente a nessuna proprietà verrebbe assegnato un valore a causa del costruttore vuoto, se un chiamante non è a conoscenza, si potrebbe potenzialmente ottenere un comportamento molto indesiderato e difficile da testare.
- Sono troppe proprietà! (nel caso 30)
Trovo molto più difficile sapere veramente in quale stato si trova l'oggetto Foo
in un dato momento, come implementatore. L'argomentazione è stata fatta "potremmo non avere le informazioni necessarie da impostare Prop5
al momento della costruzione dell'oggetto. Ok, immagino di poterlo capire, ma in tal caso rendere Prop5
pubblico solo il setter, non sempre fino a 30 proprietà in una classe.
Sono solo schizzinoso e / o pazzo per volere un corso "facile da usare" invece di essere "facile da scrivere (tutto pubblico)"? Classi come l'urlo di cui sopra per me, non so come verrà usato, quindi renderò tutto pubblico per ogni evenienza .
Se non sono terribilmente pignolo, quali sono i buoni argomenti per combattere questo tipo di pensiero? Non sono molto bravo a articolare gli argomenti, dato che mi sento molto frustrato nel cercare di ottenere il mio punto di vista (non intenzionalmente ovviamente).
get
o set
:-)