Het verhaal:
Je hebt een Business Object met een aantal members die nooit null of empty mogen zijn. Waar dus de waarde aan een bepaalde waarde moet voldoen.
Zorg je er dan voor dat dit ook nooit voor kan komen, door bij alle wegen naar de member toe een controle poortje te zetten?
Voorbeeldje, waar ID en Naam nooit leeg zijn:
Maar waar wil je nou naartoe?
Waar ik eigelijk naartoe wil is dat ik altijd deze manier hanteer. Dus ik zet bij alle wegen een controle poortje.
Het grootste nadeel hiervan is dat je geen lege ctor hebt, omdat nou eenmaal (in dit voorbeeld) ID en Naam nooit leeg kunnen zijn, er geen leeg Business Object aangemaakt kan worden.
Een leeg Business Object kunnen een hoop voordelen bieden, klein voorbeeldje:
Zonder lege ctor kun je nooit een Klant aan je KlantRepository.Add geven, omdat je anders altijd in de ctor het ID al geset moet hebben.
Ik zie ook wel is dat Business Object een internal ctor hebben, zodat je ze niet eens zelf kan instantieren maar het altijd via de Repository moet doen.
Wat is nou je vraag in het kort?
Mag een Business Object een lege/default ctor hebben terwijl er bepaalde members zijn die altijd geset moeten zijn?
Je hebt een Business Object met een aantal members die nooit null of empty mogen zijn. Waar dus de waarde aan een bepaalde waarde moet voldoen.
Zorg je er dan voor dat dit ook nooit voor kan komen, door bij alle wegen naar de member toe een controle poortje te zetten?
Voorbeeldje, waar ID en Naam nooit leeg zijn:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
| public class Klant { private int _id; private string _naam; private string _note; public int ID { get { return _id; } } public string Naam { get { return _naam; } set { if( value == null || value == string.Empty ) throw new ArgumentException( "Could not be null or emtpy." ); _naam = naam; } } public string Note { get { return _note; } set { _note = value; } } public Klant( int id, string naam, string note ) { if( naam == null || naam == string.Emtpy ) throw new ArgumentException( "Naam", "Coult not be null or empty" ); _id = id; _naam = naam; _note = note; } } |
Maar waar wil je nou naartoe?
Waar ik eigelijk naartoe wil is dat ik altijd deze manier hanteer. Dus ik zet bij alle wegen een controle poortje.
Het grootste nadeel hiervan is dat je geen lege ctor hebt, omdat nou eenmaal (in dit voorbeeld) ID en Naam nooit leeg kunnen zijn, er geen leeg Business Object aangemaakt kan worden.
Een leeg Business Object kunnen een hoop voordelen bieden, klein voorbeeldje:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
| private void cmdNewKlant_Click( object sender, EventArgs e ) { Klant newKlant = new Klant(); using( FrmNewKlant frmNewKlant = new FrmNewKlant( newKlant ) ) { if( frmNewKlant.ShowDialog( this ) == DialogResult.OK ) { _klantRepository.Add( newKlant ); } } } |
Zonder lege ctor kun je nooit een Klant aan je KlantRepository.Add geven, omdat je anders altijd in de ctor het ID al geset moet hebben.
Ik zie ook wel is dat Business Object een internal ctor hebben, zodat je ze niet eens zelf kan instantieren maar het altijd via de Repository moet doen.
Wat is nou je vraag in het kort?
Mag een Business Object een lege/default ctor hebben terwijl er bepaalde members zijn die altijd geset moeten zijn?
[ Voor 7% gewijzigd door pjvandesande op 26-09-2005 21:58 ]