Ik ben een beetje verward wat nu de meest courante manier van werken is bij het uitvoeren van business code. Stel ik heb een Item en daar kan een Bid op geboden worden, volgens de regels gedefinieerd in de business kan dit enkel onder bepaalde voorwaarden (bv bod is hoog genoeg, item is nog niet verkocht, bod kan max bepaalde waarde hebben...)
Nu kan je dat volgens mij op 2 manieren doen (zullen er nog wel meer zijn). Stel je hebt een controller en de gebruiker heeft net een bod ingegeven, nu moet gecontroleerd worden of dit bod wel geldis is:
In onderstaande code heb ik de business logica in het domein object item geplaatst, de methode addBid controleert of het bod wel geplaatst kan worden volgens de business. De methode addBid heeft wel geen itemDAO tot zijn beschikking (omdat er geen afhankelijk heid mag zijn in het domein object aan de DAO laag (unit testen wordt er een stuk beter op), daarom wordt eerst maxBid opgehaald enzo,)
Een andere methode is het gebruik van BusinessObjecten, hierbij hebben deze business objecten wel toegang tot de DAO objecten.
Ik heb het altijd volgens de laatste methode gedaan, maar ik zie in verschillende boeken (bv hiberante in action) dat velen logica in de domein objecten plaatsten, zoals ik het gebruik zijn de domein objecten eerder Value objecten, het zijn objecten die enkel data bevatten uit databank, maar zullen nooit een BusinessException opwerpen...
Ben ik nu verkeerd bezig ? Of hoe zien jullie dit ?
Nu kan je dat volgens mij op 2 manieren doen (zullen er nog wel meer zijn). Stel je hebt een controller en de gebruiker heeft net een bod ingegeven, nu moet gecontroleerd worden of dit bod wel geldis is:
In onderstaande code heb ik de business logica in het domein object item geplaatst, de methode addBid controleert of het bod wel geplaatst kan worden volgens de business. De methode addBid heeft wel geen itemDAO tot zijn beschikking (omdat er geen afhankelijk heid mag zijn in het domein object aan de DAO laag (unit testen wordt er een stuk beter op), daarom wordt eerst maxBid opgehaald enzo,)
Java:
1
2
3
4
5
6
7
8
9
10
11
| action() { Bid bid = getnewBidFromFormOrWhatever(); try { maxBid = itemDAO.getMaxBid(); minBid = //... item.addBid(bid, maxBid, minBid, ...); catch (BusinessException be) { // } return to jsp } |
Een andere methode is het gebruik van BusinessObjecten, hierbij hebben deze business objecten wel toegang tot de DAO objecten.
Java:
1
2
3
4
5
6
7
8
9
| action() { Bid bid = getnewBidFromFormOrWhatever(); try { itemBO.addBid(item,bid); catch (BusinessException be) { // } return to jsp } |
Ik heb het altijd volgens de laatste methode gedaan, maar ik zie in verschillende boeken (bv hiberante in action) dat velen logica in de domein objecten plaatsten, zoals ik het gebruik zijn de domein objecten eerder Value objecten, het zijn objecten die enkel data bevatten uit databank, maar zullen nooit een BusinessException opwerpen...
Ben ik nu verkeerd bezig ? Of hoe zien jullie dit ?
"Live as if you were to die tomorrow. Learn as if you were to live forever"