Ik heb zojuist een discussie gehad met een leraar over de verantwoordelijkheden wat betreft het aanmaken van een formulier bij een loginsequentie. Mijn leraar stelde het volgende ontwerp voor:

Uitleg:
De applicatie (GUI) gebruikt een abstracte login-class, welke gebruikt kan worden om op verschillende manieren in te loggen. Het Formulier onder LottoLogin kan gebruikt worden om een gebruikersnaam en wachtwoord in te vullen, terwijl een Kaartlezer gebruikt kan worden om in te loggen middels een pasje, waarbij dus geen formulier op het scherm zichtbaar wordt. Hierbij zijn er dus twee totaal verschillende manieren om in te loggen.
Dan nu methode 2:

Uitleg:
Hierin gaat hetzelfde verhaal op, alleen is de verantwoordelijkheid voor het tekenen van het formulier verplaatst naar de applicatie zelf. Dit betekent dat de rest van de klassen generiek is, en de GUI makkelijk ervan los te koppelen is, zonder de "hoofdapplicatie" aan te passen.
Nou hebben beide methoden voor- en nadelen. De eerste methode houdt in dat het zaakje generieker aan is te passen; de interface met de kaartlezer is irrelevant, en dat geldt ook voor het formulier. Echter betekent dit wel dat je telkens de hoofdapplicatie aan moet passen wanneer je een ander formulier wilt gebruiken om in te loggen, terwijl mij altijd is geleerd dat dit deel van de applicatie vrij gehouden moet worden van GUI-spul. De tweede methode scheidt GUI en logica, maar resulteert in een veel minder generieke interface.
Ik vraag me af of er niet een nettere manier is om dit probleem op te lossen, zonder op functionaliteit in te leveren. Weet iemand van jullie misschien een bruikbaar pattern of architectuur?

Uitleg:
De applicatie (GUI) gebruikt een abstracte login-class, welke gebruikt kan worden om op verschillende manieren in te loggen. Het Formulier onder LottoLogin kan gebruikt worden om een gebruikersnaam en wachtwoord in te vullen, terwijl een Kaartlezer gebruikt kan worden om in te loggen middels een pasje, waarbij dus geen formulier op het scherm zichtbaar wordt. Hierbij zijn er dus twee totaal verschillende manieren om in te loggen.
Dan nu methode 2:

Uitleg:
Hierin gaat hetzelfde verhaal op, alleen is de verantwoordelijkheid voor het tekenen van het formulier verplaatst naar de applicatie zelf. Dit betekent dat de rest van de klassen generiek is, en de GUI makkelijk ervan los te koppelen is, zonder de "hoofdapplicatie" aan te passen.
Nou hebben beide methoden voor- en nadelen. De eerste methode houdt in dat het zaakje generieker aan is te passen; de interface met de kaartlezer is irrelevant, en dat geldt ook voor het formulier. Echter betekent dit wel dat je telkens de hoofdapplicatie aan moet passen wanneer je een ander formulier wilt gebruiken om in te loggen, terwijl mij altijd is geleerd dat dit deel van de applicatie vrij gehouden moet worden van GUI-spul. De tweede methode scheidt GUI en logica, maar resulteert in een veel minder generieke interface.
Ik vraag me af of er niet een nettere manier is om dit probleem op te lossen, zonder op functionaliteit in te leveren. Weet iemand van jullie misschien een bruikbaar pattern of architectuur?
'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.