Ik ben momenteel bezig met een database applicatie.
De applicatie is opgesplitst in 2 delen. De backend en de frontend.
De backend bevat in princiepe alle implementatie om gegevens op te halen en te muteren.
De frontend bevat de gui. (duh)
Omdat wij een lage koppeling tussen de frontend en backend willen creeren implementeerd de backend een Maincontroller welke volgens het facade patroon een interface aanbied naar de frontend.
De bedoeling is dat de GUI de interface van de facade gebruikt om te communiceren met de backend. Alleen in de gui worden ook lijsten van gegevens weergegeven. Indien men een record in een van deze lijsten wijzigd, door middel van een toevoeging of andere mutatie. Dan willen we dat deze lijst in de gui geupdate wordt (ofcourse
). Omdat we niet bij iedere insert/update/delete call naar de facade gelijk daarna een update statement neer willen zetten die de desbetreffende lijst update, ben ik van plan om het observer patroon te implementeren.
Alleen nu zit ik dus met het volgende probleem.
Als je vanuit de gui een subscribe doet op je subject dan wil je dat deze subject zo specifiek mogelijk is. Ik wil me dus kunnen subscriben op alle mutaties m.b.t Users, en niet dat ik gedwongen ben om me te subscriben op ALLE mutaties over het gehele programma.
Om dit te implementeren heb je in dit geval 2 mogelijkheden (zover ik het zie).
1: Je maakt in de facade een onderverdeling in functionaliteit en bied voor iedere set van functionaliteiten een subject implementatie aan. (M.a.w de facade krijgt voor iedere set van functionaliteiten een subscribe/unsubscribe/notify functie (opmerking: verwachting is dat we dan een stuk of 10 sets krijgen).
2: Je maakt in de gui een laag aan waarin controllers zitten die een subset van de interface van de facade implementeren. In die controllers kun je dan het observer patroon implementeren.
De gui praat tegen deze specifieke controllers om gegevens op te halen.
Ik ben dus in discussie met een collega over welke oplossing we zouden moeten nemen.
Ikzelf ben voor oplossing 2. Omdat je dan een betere opdeling van verantwoordelijkheden hebt plus je krijgt niet in de facade tig implementaties van je Subject interface.
Nadeel is dat je ogenschijnlijk een hogere koppeling hebt met je backend. Mijn collega ziet het voordeel niet echt.
Mijn collega is voor oplossing 1. Onder het motto dat je een lagere koppeling hebt tussen je frontend en backend. Plus hij vindt oplossing 2 veel omslachtiger en ziet niet in waarom je het observer patroon niet in de facade kan implementeren (hetzij op de manier zoals eerder beschreven of op een andere manier).
ik vindt oplossing 2 veel netter en je hebt een betere verdeling van verantwoordelijkheden. Maar, inderdaad, als je naar het klassediagram gaat kijken dan ziet het er wel omslachtig uit. Want in feite maak je een kopie van de controllers uit de backend, in de frontend
Het ziet er dan ongeveer zo uit (textuele weergave
)
Misschien zien jullie wel een hele andere oplossing en zit ik en mijn collega momenteel gewoon vast in een bepaalde gedachtengang. Of indien dit niet het geval is, voor welke oplossing zouden jullie kiezen en waarom?
Mijn collega en ik zitten momenteel in een soort van stalemate
Vandaar dit topic, we hopen tot nieuwe inzichten te komen of om genoeg argumenten te hebben om de ander, spreekwoordelijk te begraven
De applicatie is opgesplitst in 2 delen. De backend en de frontend.
De backend bevat in princiepe alle implementatie om gegevens op te halen en te muteren.
De frontend bevat de gui. (duh)
Omdat wij een lage koppeling tussen de frontend en backend willen creeren implementeerd de backend een Maincontroller welke volgens het facade patroon een interface aanbied naar de frontend.
De bedoeling is dat de GUI de interface van de facade gebruikt om te communiceren met de backend. Alleen in de gui worden ook lijsten van gegevens weergegeven. Indien men een record in een van deze lijsten wijzigd, door middel van een toevoeging of andere mutatie. Dan willen we dat deze lijst in de gui geupdate wordt (ofcourse
Alleen nu zit ik dus met het volgende probleem.
Als je vanuit de gui een subscribe doet op je subject dan wil je dat deze subject zo specifiek mogelijk is. Ik wil me dus kunnen subscriben op alle mutaties m.b.t Users, en niet dat ik gedwongen ben om me te subscriben op ALLE mutaties over het gehele programma.
Om dit te implementeren heb je in dit geval 2 mogelijkheden (zover ik het zie).
1: Je maakt in de facade een onderverdeling in functionaliteit en bied voor iedere set van functionaliteiten een subject implementatie aan. (M.a.w de facade krijgt voor iedere set van functionaliteiten een subscribe/unsubscribe/notify functie (opmerking: verwachting is dat we dan een stuk of 10 sets krijgen).
2: Je maakt in de gui een laag aan waarin controllers zitten die een subset van de interface van de facade implementeren. In die controllers kun je dan het observer patroon implementeren.
De gui praat tegen deze specifieke controllers om gegevens op te halen.
Ik ben dus in discussie met een collega over welke oplossing we zouden moeten nemen.
Ikzelf ben voor oplossing 2. Omdat je dan een betere opdeling van verantwoordelijkheden hebt plus je krijgt niet in de facade tig implementaties van je Subject interface.
Nadeel is dat je ogenschijnlijk een hogere koppeling hebt met je backend. Mijn collega ziet het voordeel niet echt.
Mijn collega is voor oplossing 1. Onder het motto dat je een lagere koppeling hebt tussen je frontend en backend. Plus hij vindt oplossing 2 veel omslachtiger en ziet niet in waarom je het observer patroon niet in de facade kan implementeren (hetzij op de manier zoals eerder beschreven of op een andere manier).
ik vindt oplossing 2 veel netter en je hebt een betere verdeling van verantwoordelijkheden. Maar, inderdaad, als je naar het klassediagram gaat kijken dan ziet het er wel omslachtig uit. Want in feite maak je een kopie van de controllers uit de backend, in de frontend
Het ziet er dan ongeveer zo uit (textuele weergave
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| [backend] [laag specifieke controllers] [facade welke de gecombineerde interfaces van de specifieke controllers aanbied] [einde backend] [frontend] [laag specifieke controllers welke met de facade praten en observer patroon implementeren] [gui welke met de specifieke controllers praten] [einde frontend] |
Misschien zien jullie wel een hele andere oplossing en zit ik en mijn collega momenteel gewoon vast in een bepaalde gedachtengang. Of indien dit niet het geval is, voor welke oplossing zouden jullie kiezen en waarom?
Mijn collega en ik zitten momenteel in een soort van stalemate