Ik ben bezig met het bouwen van een CMS waarbij ik echt serieus goede coding practices probeer te volgen en ik stuit nu eigenlijk voor het eerst op een echt side effect probleem. Het is niet zozeer dat de side effect zelf een probleem is, maar ik kan nu moeilijk inschatten hoe erg het is dat deze side effect aanwezig is. Ik zal even uitleggen hoe de situatie is.
Ik heb een class Page waarop operaties uitgevoerd kunnen worden welke soms effect hebben op het uiterlijk/indeling van de pagina. Nu ben ik ook bezig om caching in te bouwen en wil ik dat op het moment dat bepaalde acties worden uitgevoerd, dat de huidige cache, indien aanwezig, wordt verwijderd (wordt geinvalideerd) en dat de pagina wordt opgeslagen (met geen waarde als cache dan).
De bepaalde acties waar ik het over heb zijn bijvoorbeeld operaties voor het wisselen van de posities van 2 items of het toevoegen van een content item aan de pagina. Het probleem is nu dat ik niet goed weet wanneer ik de invalidatie van de cache moet uitvoeren. Ik heb de keuze om de invalidatie in de functie zelf te doen, of iedere keer nadat de functie is aangeroepen. Ik weet zeker dat deze actie iedere keer uitgevoerd moet worden als de functie wordt aangeroepen. Het invalideren hoort echter niet bij de operatie die de functie moet voorstellen en is daarom een side effect. Zoals ik heb gelezen zijn side effects slecht, je moet ze zien te voorkomen, maar in dit geval lijkt het me niet zo erg.
De twee opties die ik dus heb zijn:
of
Hoe staan jullie hier tegenover? Persoonlijk heb ik de voorkeur voor de 2de methode ook omdat het mogelijk is om meerdere operaties uit te voeren die allen de cache zouden invalideren. Echter zit je wel met dubbele code als je een bepaalde methode op meerdere plaatsen aanroept. Zijn jullie hier erg strict in of maken jullie wel eens een uitzondering?
Ik heb een class Page waarop operaties uitgevoerd kunnen worden welke soms effect hebben op het uiterlijk/indeling van de pagina. Nu ben ik ook bezig om caching in te bouwen en wil ik dat op het moment dat bepaalde acties worden uitgevoerd, dat de huidige cache, indien aanwezig, wordt verwijderd (wordt geinvalideerd) en dat de pagina wordt opgeslagen (met geen waarde als cache dan).
De bepaalde acties waar ik het over heb zijn bijvoorbeeld operaties voor het wisselen van de posities van 2 items of het toevoegen van een content item aan de pagina. Het probleem is nu dat ik niet goed weet wanneer ik de invalidatie van de cache moet uitvoeren. Ik heb de keuze om de invalidatie in de functie zelf te doen, of iedere keer nadat de functie is aangeroepen. Ik weet zeker dat deze actie iedere keer uitgevoerd moet worden als de functie wordt aangeroepen. Het invalideren hoort echter niet bij de operatie die de functie moet voorstellen en is daarom een side effect. Zoals ik heb gelezen zijn side effects slecht, je moet ze zien te voorkomen, maar in dit geval lijkt het me niet zo erg.
De twee opties die ik dus heb zijn:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| class Page
{
function addItem(item)
{
// voeg het item toe
this.invalidateCache();
}
function invalidateCache()
{
// invalideer de cache
}
}
page = bestaande page instantie;
page.addItem(new Item()); |
of
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| class Page
{
function addItem(item)
{
// voeg het item toe
}
function invalidateCache()
{
// invalideer de cache
}
}
page = bestaande page instantie;
page.addItem(new Item());
page.invalidateCache(); |
Hoe staan jullie hier tegenover? Persoonlijk heb ik de voorkeur voor de 2de methode ook omdat het mogelijk is om meerdere operaties uit te voeren die allen de cache zouden invalideren. Echter zit je wel met dubbele code als je een bepaalde methode op meerdere plaatsen aanroept. Zijn jullie hier erg strict in of maken jullie wel eens een uitzondering?