Archief - MVC - Window close events en flow

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

ultddave

Legacy Member
Hey,

Ik had twee vraagjes ivm het MVC-pattern (Model View Controller). Hoe zouden jullie de volgende situatie aanpakken:
Vraag 1:
Je hebt een LoginModel-klasse, een LoginController-klasse en een LoginWindow-klasse die dus respectievelijk de Model, Controller en View voorstellen.

Indien de gebruiker op de loginknop op de GUI drukt, dan wordt de onClick-event gewoon doorgegeven aan de Controller en die roept de relevante functie aan op de model. No problem. Window Close Events kan je op die manier ook doorgeven aan de controller (ik denk niet dat hij die moet doorspelen naar de model, want de model heeft niets te maken met dat soort events van de View?). Dus de controller kan dan de nodige stappen ondernemen.

Maar hoe moet het in de omgekeerde richting? => De gebruiker drukt op de loginknop => onClick event naar controller => controller roept "login()" functie op van de model. De model beslist dat de gebruiker mag inloggen en als gevolg moet het LoginWindow dus sluiten.

Uiteraard kan je via de Model een "viewCloseEvent" uitsturen, die via de controller de view bereikt etc. maar is dat opzich de taak van de model?

Of moet de controller dit regelen, bijvoorbeeld op deze manier :

Code:
void onLoginButtonClick(EventStuff e)
{
   if(model.login())
        view.close();
   // Else => model doet een propertyChangeEvent met de foutcode en uitleg
}
(In de veronderstelling dat de model.login() functie "true" returned als de login succesvol was.)

Vraag 2:
Wie heeft de verantwoordelijkheid voor de programmaflow te regelen? Concreet: Aansluitend aan vraag 1, wie beslist welke view/model/controller aangemaakt moet worden nadat de gebruiker met succes is ingelogd. Is dat de controller? Eg:
Code:
void onLoginButtonClick(EventStuff e)
{
   if(model.login()) {
        view.close();
        MainController c = new MainController(); // Maakt de bijhorende view en model aan
        c.launch();   
   }
   // Else => model doet een propertyChangeEvent met de foutcode en uitleg
}

Op internet vind je veel voorbeelden van MVC-implementaties, maar meestal zijn dat gewoon drie klassen die ze laten zien. Dus zonder programmaflow en meestal ook zonder closeEvents.

Dank bij voorbaat.

Greetz,
Dave

ultddave

Legacy Member
Ofcourse, maar de vraag was eerder algemeen bedoelt, niet zozeer voor dit kleine voorbeeldje. Maar inderdaad, voor zoiets is dat uiteraard een beetje overkill ;), thanks.

Speedyke

Legacy Member
Hoe ik het zie:

In het click event van u loginbutton roep je een methode op van de controller. De controller gaat dan 'inloggen' (niet het model) en afhankelijk van het resultaat gaat de controller dan u form sluiten door een methode in u view aan te roepen.

NeverwinterX

Legacy Member
Zolang het model niet het window sluit en het volgende opent, zit je goed. Dat is de essentie van MVC en zijn 1001 "kijk-mij-eens-origineel-zijn-ik-plak-er-een-laag-tussen-die-eigenlijk-hetzelfde-doet-als-de-controller-en-nu-werkt-alles-ineens-zoveel-beter" varianten.

ultddave

Legacy Member
NeverwinterX zei:
Zolang het model niet het window sluit en het volgende opent, zit je goed. Dat is de essentie van MVC en zijn 1001 "kijk-mij-eens-origineel-zijn-ik-plak-er-een-laag-tussen-die-eigenlijk-hetzelfde-doet-als-de-controller-en-nu-werkt-alles-ineens-zoveel-beter" varianten.
Ok, thanks ^^.

VinceVe

Legacy Member
Gewoon kijken aan de hand van het resultaat van je login methode. Zo zou ik het ook doen :)
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan