Ik zit over het volgende na te denken;
Stel, je hebt een class Customer. Deze class bevat een collectie van Orders. Een Order heeft een verwijzing naar de Customer tot wie hij behoort.
Je hebt ook 2 repositories; een CustomerRepository en een OrderRepository. De CustomerRepository heeft een Save( Customer ) method die alle informatie van de Customer gaat persisteren. Die CustomerRepository gebruikt dan ook de OrderRepository om ieder Order van die Customer dat gewijzigd is (of nieuw gecreeërd) is, te gaan opslaan/updaten.
Tot zover geen probleem.
Echter, wat doe je met die Customer referentie in Order, in de OrderRepostory ?
Een OrderRepository heeft ook een Save( Order ) method. Wat als je beslist om ook hier te checken of de evt wijzigingen Customer moeten gepersisteerd worden ?
Ter illustratie:
Zoals je ziet, zitten we hier eigenlijk in een soort ‘oneindige lus’. De CustomerRepository savet de Customer, en roept de OrderRepository op, die de Orders gaat gaan saven, maar deze gaat dan ook weer de Customer gaan updaten.
Eigenlijk zou je in die CustomerRepository moeten aangeven dat die Customer niet meer dirty is voor je de Orders gaat gaan wegschrijven; echter, die IsNew en IsDirty properties zijn read-only, en de 'AcceptChanges' method gaat IsDirty en IsNew van de Customer, maar ook van alle andere gerelateerde objecten binnen die entity (de Orders dus) op false gaan zetten.
Ofwel zou de OrderRepository zich niet mogen bezighouden met het updaten/saven van de Customer die gerelateerd is aan dat Order.
Stel, je hebt een class Customer. Deze class bevat een collectie van Orders. Een Order heeft een verwijzing naar de Customer tot wie hij behoort.
Je hebt ook 2 repositories; een CustomerRepository en een OrderRepository. De CustomerRepository heeft een Save( Customer ) method die alle informatie van de Customer gaat persisteren. Die CustomerRepository gebruikt dan ook de OrderRepository om ieder Order van die Customer dat gewijzigd is (of nieuw gecreeërd) is, te gaan opslaan/updaten.
Tot zover geen probleem.
Echter, wat doe je met die Customer referentie in Order, in de OrderRepostory ?
Een OrderRepository heeft ook een Save( Order ) method. Wat als je beslist om ook hier te checken of de evt wijzigingen Customer moeten gepersisteerd worden ?
Ter illustratie:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| public void Save( Customer c )
{
if( c.IsNew )
{
// insert customer
}
else if( c.IsDirty )
{
// update customer
}
foreach( Order o in c.Orders )
{
orderRepositoryObj.Save (o);
}
c.AcceptChanges();
} |
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
| public void Save( Order o )
{
if( o.IsNew )
{
// insert order
}
else if( o.IsDirty )
{
// update order
}
customerRepositoryObj.Save (o.Customer);
} |
Zoals je ziet, zitten we hier eigenlijk in een soort ‘oneindige lus’. De CustomerRepository savet de Customer, en roept de OrderRepository op, die de Orders gaat gaan saven, maar deze gaat dan ook weer de Customer gaan updaten.
Eigenlijk zou je in die CustomerRepository moeten aangeven dat die Customer niet meer dirty is voor je de Orders gaat gaan wegschrijven; echter, die IsNew en IsDirty properties zijn read-only, en de 'AcceptChanges' method gaat IsDirty en IsNew van de Customer, maar ook van alle andere gerelateerde objecten binnen die entity (de Orders dus) op false gaan zetten.
Ofwel zou de OrderRepository zich niet mogen bezighouden met het updaten/saven van de Customer die gerelateerd is aan dat Order.
https://fgheysels.github.io/