Oop ontwerp voor captcha
Mijn reactie op de tutorial was als volgt:
Sinds kort ben ik me eigen aan het oriënteren op het gebied van object georiënteerd programmeren, daarom ben ik de schrijver van deze tutorial zeer dankbaar voor het leveren van een bijdrage in mijn leerproces.
Ik ben wat aan het oefenen gegaan, maar ik wil even weten of ik op de juiste wijze bezig ben.
Ik ben nu bezig met een captcha script die uit drie klassen bestaat: Captcha, Code en Image. De Captcha klasse maakt een nieuw object Code, en extends de klasse Image. Volgens mijn gedachtegang is dit een goede wijze, een Captcha is namelijk ook een Image.
Maar wat vinden de OOP experts ervan?
Edit:
Ik zit alleen te twijfelen of ik Image wel moet extenden in de Captcha klasse, aanzien de Captcha klasse eigenlijk meer een soort van controller is. In de Captcha klasse worden de instellingen gedaan en deze maakt een code aan via de klasse Code, daarna wordt de code op een afbeelding getoond via de functies in de Image klasse. De Captcha klasse heeft dus eigenlijk geen specifieke afbeelding functies maar hij roept ze aan in de Klasse Image.
Gewijzigd op 01/01/1970 01:00:00 door Jeroen Nieuwenhuisen
Het is maar hoever je wilt gaan. Je zou het helemaal uit kunnen zetten en zoals je zelf al aangeeft een Captcha-controle klasse kunnen maken. Deze genereert vervolgens een nieuw Code-object (het Code-object genereert z'n code) en maakt een nieuwe CaptchaImage object aan. CaptchaImage extend Image en slikt en Code-object. Aan de hand van dat Code object tekent hij zichzelf en dankzij de Image-eigenschappen kan je hem aan de gebruiker laten zien.
Ik heb een diagram van de structuur gemaakt, hieronder staat een linkje.
Link naar diagram
Uitleg van de klassen:
- Catcha: De captcha klasse is een soort van controller, via deze klasse kun je instellingen maken. De Captcha klasse maakt 2 objecten aan Code en CaptchaImage, via deze object worden de juiste functies aangeroepen om een captcha afbeelding te genereren.
- Code: Via deze klasse kan op verschillende wijze een code gegenereerd worden, deze klasse is niet afhankelijk van andere klasse.
- CaptchaImage: Deze klasse genereert de uiteindelijke afbeelding, hiervoor maakt hij gebruik van de klasse Image die algemene afbeelding functionalist bevat. Omdat een CaptchaImage ook een Image is wordt de klasse afgeleid van Image, doormiddel van extending.
- Image: De klasse Image bevat de algemene functionaliteit voor het creëren van een afbeelding, deze klasse is niet afhankelijk van een andere klasse
Gewijzigd op 01/01/1970 01:00:00 door Jeroen Nieuwenhuisen
Ik heb in mijn achterhoofd nog iets zitten dat bij het lezen van je bericht constant 'canvas', 'canvas!' roept. Dit omdat je eigenlijk niet tekent op een image, maar op een canvas wat je vervolgens kan exporteren naar bijvoorbeeld een image (maar ook naar een SVG-document, of een PDF-document etc.) Echter, wanneer je deze laag van abstractie er ook nog in zou aanbrengen (en het is maar de vraag of je ooit gebruik van deze extra laag gaat maken) wordt je code voor het simpelweg genereren van een captcha-image relatief enorm. Ik denk dat je huidige opzet uitgebreid en abstract genoeg is voor gebruik in de praktijk.
Enige waar je nog even over moet nadenken is dat je je captcha-plaatje los van de rest van het document moet opsturen. Hij heeft z'n eigen request. Je controller zal bij het starten dus niet automatisch een nieuwe code moeten genereren, maar alleen wanneer hij vanuit het formulier wordt aangeroepen. Bij het verwerken van het plaatje, en van het uiteindelijk opgestuurde formulier moet deze code gelijk blijven.