intro
Bij het besturderen van de het J2EE pattern Value Objects (VO) viel het me op dat er veel dubbel werk in zit. Zo hebben de business classes (BC) en bijbehoordende value objects dezelfde getters en setters. Er is een mogelijkheid om de business class te laten overerven van het value object maar die vlieger gaat weer niet op als het business object voor verschillende clients verschillende vo's maakt. Maar ik heb een ander probleem bij VO's. Wat doe je met de controle?
Een voorbeeldje
Hieronder heb ik een simpele klasse gemaakt met en een bijbehoordend VO.
In de BC wordt de data gecontroleerd, in de VO niet. Op een gegeven moment komt de VO weer bij de BC terug, moet je dan de data gaan controleren? Dit betekent dus dat de create van de BC de eigen setter methodes moet gebruiken? In het voorbeeld van Sun staat bijvoorbeeld de procedure mergeKlasse(VO updated) die direct naar de private variabelen schrijft.
Het lijkt mij handiger om alleen voor de weergave VO's te gebruiken omdat er dan toch niets wijzigd. Op moment dat er data gewijzigd wordt wil je dit zo vroeg mogelijk controleren.
wat is nu de vraag?
Op dit moment werk ik met Servlets waarin direct de business objects gemaakt worden en de gegevens in gegooid worden. Deze klasse wordt dan ook aan de Data Access Objects (DAO's) (ander pattern) doorgegeven. Ik gok dat het op dit punt beter is om een VO mee te geven. DAO's horen waarschijnlijk ook VO's terug te geven ipv complete business classes. Wanner moet ik nu werkelijk VO's gebruiken en wanneer vindt de controle op gegevens plaats? Heeft iemand nog een leuk voorbeeld buiten die van Sun?
[small]Sorry voor de vele afkortingen, hoop dat het nog duidelijk is[/small
Bij het besturderen van de het J2EE pattern Value Objects (VO) viel het me op dat er veel dubbel werk in zit. Zo hebben de business classes (BC) en bijbehoordende value objects dezelfde getters en setters. Er is een mogelijkheid om de business class te laten overerven van het value object maar die vlieger gaat weer niet op als het business object voor verschillende clients verschillende vo's maakt. Maar ik heb een ander probleem bij VO's. Wat doe je met de controle?
Een voorbeeldje
Hieronder heb ik een simpele klasse gemaakt met en een bijbehoordend VO.
Java:
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
| public class BusinessClassTest { private int lowest; private int highest; public BusinessClassTestVO createBCTVO() { return (new BusinessClassTestVO(lowest, higest)); } public int getLowest() { return lowest; } public void setLowest(int arg0) { if (arg0 > lowest) { throw new Exception.create(“arg0 is niet het laagste”); } lowest = arg0; } //hetzelfde voor highest } public class BusinessClassTestVO implements Serializable { private int lowest; private int highest; public BusinessClassTestVO() { } public BusinessClassTestVO(int low, int high) { lowest = low; highest = high; } //VO getter en setters zonder controle } |
In de BC wordt de data gecontroleerd, in de VO niet. Op een gegeven moment komt de VO weer bij de BC terug, moet je dan de data gaan controleren? Dit betekent dus dat de create van de BC de eigen setter methodes moet gebruiken? In het voorbeeld van Sun staat bijvoorbeeld de procedure mergeKlasse(VO updated) die direct naar de private variabelen schrijft.
Het lijkt mij handiger om alleen voor de weergave VO's te gebruiken omdat er dan toch niets wijzigd. Op moment dat er data gewijzigd wordt wil je dit zo vroeg mogelijk controleren.
wat is nu de vraag?
Op dit moment werk ik met Servlets waarin direct de business objects gemaakt worden en de gegevens in gegooid worden. Deze klasse wordt dan ook aan de Data Access Objects (DAO's) (ander pattern) doorgegeven. Ik gok dat het op dit punt beter is om een VO mee te geven. DAO's horen waarschijnlijk ook VO's terug te geven ipv complete business classes. Wanner moet ik nu werkelijk VO's gebruiken en wanneer vindt de controle op gegevens plaats? Heeft iemand nog een leuk voorbeeld buiten die van Sun?
[small]Sorry voor de vele afkortingen, hoop dat het nog duidelijk is[/small
www.fendt.com | Nikon D7100 | PS5