Stiamo facendo molti test unitari e refactoring dei nostri oggetti di business, e sembra che molto opinioni diverse sul design della classe rispetto ad altri colleghi.
Un esempio di classe di cui non sono un 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.
I odio questa classe, e non so se sono solo schizzinoso. Alcune note:
- I campi di backing privati senza logica nelle proprietà, sembrano non necessari e mettono a nudo la classe
- Costruttori multipli (un po 'ok) ma accoppiati con
- tutte le proprietà che hanno un setter pubblico, non sono un fan.
- Potenzialmente a nessun proprietà verrà assegnato un valore a causa del costruttore vuoto, se un chiamante non è consapevole, potresti potenzialmente ottenere alcuni comportamenti indesiderati e difficili da testare.
- Sono troppe proprietà! (nel 30 caso)
Trovo molto più difficile veramente sapere quale stato l'oggetto Foo
è in un dato momento, come un implementatore. L'argomentazione è stata fatta "potremmo non avere le informazioni necessarie per impostare Prop5
al momento della costruzione dell'oggetto. Ok, credo di poterlo capire, ma se questo è il caso rendere solo Prop5
setter pubblico, non sempre fino a 30 proprietà in una classe.
Sono semplicemente pignolo e / o pazzo per aver voluto una classe che sia "facile da usare" invece di essere "facile da scrivere (tutto pubblico)"? Classi come l'urlo di cui sopra, non so come sarà usato, quindi renderò tutto pubblico nel caso .
Se non sono terribilmente schizzinoso, quali sono i buoni argomenti per combattere questo tipo di pensiero? Non sono molto bravo nell'articolare le argomentazioni, poiché sono molto frustrato nel cercare di ottenere il mio punto di vista (non intenzionalmente, ovviamente).