[OOP] MVC-pattern

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Junior/Medior Front-end developer

Functie Als Front-end developer werk je intensief samen met 1 van de UX-designers en denk je mee over de gebruiksvriendelijkheid en design van onze web- en mobile apps. Je bent betrokken bij sessies met gebruikers om designs te valideren en usability van de app-in-wording te testen. Vervolgens gebruik je dit om samen met je team waarin ook back-end (.NET) developers zitten, te zorgen voor de realisatie van de best mogelijke apps voor studenten en docenten. Eisen • Je hebt een hands-on development en coding mind-set en werkt graag aan een high quality code base welke je consequent onderhouden kan worden

Bekijk vacature »

Java Developer

Dit ga je doen Als Java Developer ben je verantwoordelijk voor: Het ontwikkelen van nieuwe en bestaande webservices; Het uitbreiden van functionaliteiten binnen de producten- en dienstenportefeuille; Het werken aan gegevensuitwisseling met bijvoorbeeld SOAP; Testen van frameworks met gebruik van UNIT en Selenium. Hier ga je werken De organisatie waar je komt te werken is een semi-overheidsinstelling, gesitueerd in Utrecht en zorgt voor een goede samenwerking tussen verschillende overheidsinstanties. Het is een familiaire club die gaat voor kwaliteit en langdurige relaties. Zo zorgen zij ervoor dat er op grote schaal vertrouwelijke informatie tussen verschillende overheidsinstellingen wordt uitgewisseld. Hun werk zorgt

Bekijk vacature »

.NET developer

Wat ga je doen als Full stack .NET developer Microsoft 365? Je stelt je op als sparringpartner voor het team en PO over toekomstige functionaliteiten, architectuur en mogelijke nieuwe producten. Je bent mede-verantwoordelijk voor het vertalen en omzetten van een user story in een passend technisch design. Je implementeert functionaliteiten op basis van een technisch design en user story. Je bent mede-verantwoordelijk voor het beheer van Azure DevOps, waaronder het beheer van GIT, Build Pipelines, Release Pipelines en geautomatiseerde testen. Hier herken jij jezelf in Hbo werk- en denkniveau of hoger aangevuld met relevante certificeringen en/of cursussen; Minimaal 3 jaar

Bekijk vacature »

PHP developer

Functie Voor een opdrachtgever in omgeving Leiden zijn wij op zoek naar een PHP developer die affiniteit heeft met C++. Ben jij reeds afgestudeerd of heb je al een paar jaar ervaring? Lees snel verder en kijk of dit iets voor jou is! Hoe kan jouw dag er straks uitzien? Je gaat software en webapplicaties ontwikkelen met behulp van de talen C / C++ / PHP. Je gaat technische klussen uitvoeren op locatie bij klanten. Je onderhoudt contact met de projectleider om er zeker van te zijn dat een projecten goed verlopen. Je gaat klanten ondersteunen op het gebied van

Bekijk vacature »

Laravel developer

Zie jij mogelijkheden om onze tooling technisch te verbeteren en uit te bouwen? Over Jobmatix Jobmatix is een innovatieve en internationale speler op het gebied van jobmarketing. Onze jobmarketing automation tool helpt organisaties bij het aantrekken van nieuw talent door vacatures digitaal, geautomatiseerd en op een efficiënte manier te adverteren en onder de aandacht te brengen bij de doelgroep op 25+ jobboards. Volledig performance-based, waarbij organisaties betalen op basis van cost per click of cost per applicant. Maandelijks wordt onze jobmarketing automation tool al gebruikt door vele directe werkgevers, intermediairs en mediabureaus, waaronder Picnic, Rijkswaterstaat, AdverOnline, Schiphol, DPA, Teleperformance en

Bekijk vacature »

Software Developer C# / ASP .Net

Functie omschrijving Ben jij een software ontwikkelaar die bekend is met termen ASP .NET, C# en SQL? Lees dan snel verder! Voor een bedrijf binnen de agrarische sector zijn wij namelijk op zoek naar een zelfstandige, enthousiaste en proactieve Software Developer die open staat voor een afwisselende functie met veel uitdaging. Binnen deze organisatie ben jij als Software Developer samen met één andere collega verantwoordelijk voor de ontwikkeling en modificatie van het support en controle programma dat binnen dit bedrijf gebruikt wordt. Hierbij draag jij bij aan de vertaling van klantwensen naar effectieve softwareoplossingen. Daarnaast ben je verantwoordelijk voor: Schatten

Bekijk vacature »

Senior Javascript developer

Functie Het platform is gebouwd in een moderne JavaScript stack, die gebruikt maakt van:  React.js  Redux  TypeScript  Node.js  Google Cloud functions (node.js)  Semantic UI Alle code wordt getest en beoordeeld door collega developers. De continuous integration pipeline maakt het mogelijk om elke dag waarde te leveren aan hun klanten. Het ontwikkelproces is pragmatisch en gebaseerd op Scrum. Wat je zult doen: Ten eerste kun je nadrukkelijk jouw eigen stempel drukken op de technologie, het product en de cultuur van het bedrijf. Je bent bezig met het uitwerken van de architectuur van nieuwe functionaliteiten op

Bekijk vacature »

PHP developer (Laravel/Vue.js)

Functie Het team telt momenteel 20 collega’s, bestaande uit developers (front- en backend) en het operations team, waaronder ook het management en twee scrum masters vallen. Ze zijn op zoek naar een PHP developer die in staat is zelfstandig te werken. Je komt te werken in één van de drie scrumteams en gaat aan de slag met een project voor de klant. Het fijne hieraan is dat je wel afwisseling hebt qua werk, maar tegelijkertijd doorlopend werkt voor bestaande klanten. Hierdoor krijg je ook de kans om echt de diepte in te gaan en innovatieve technische oplossingen neer te zetten.

Bekijk vacature »

Medior Java developer

Wat je gaat doen: Of beter nog, wat wil jij doen? Binnen DPA GEOS zijn we dan ook op zoek naar enthousiaste Java developers om ons development team te versterken. Als Java developer werk je in Agile/Scrum teams bij onze klanten en daarbij kun je eventueel ook andere ontwikkelaars begeleiden in het softwareontwikkelproces. Verder draag je positief bij aan de teamgeest binnen een projectteam en je kijkt verder dan je eigen rol. Je gaat software maken voor verschillende opdrachtgevers in jouw regio. Je bent een professional die het IT-vak serieus neemt en kwaliteit levert. Je leert snel vanwege je diepgaande

Bekijk vacature »

Senior Node.js developer Digital Agency

Functie Door de groei van de organisatie zijn ze op zoek naar een Tech Lead. Als tech lead ben jij verantwoordelijk Als Back end Node.js developer kom je terecht in een van de 8 multidisciplinaire teams in het projectenhuis. Afhankelijk van jouw interesses, wensen en capaciteiten word je bij projecten en onderwerpen naar keuze betrokken. Als ervaren ontwikkelaar zul jij vaak leiding nemen in de projecten en in het team een aanvoerder zijn van technische discussies. Uiteindelijk wil jij natuurlijk de klantwensen zo goed mogelijk vertalen naar robuuste code. De projecten kunnen varieren van langlopende- tot kleinschalige trajecten. Voorheen werkte

Bekijk vacature »

Applicatieontwikkelaar Java EE

Bedrijfsomschrijving De IV- organisatie van de Belastingdienst is verantwoordelijk voor en verzorgt de ICT- voorzieningen. Het merendeel van de applicaties wordt op dit moment door de IV- organisatie zelf ontwikkeld, onderhouden en beheerd in het eigen data center. Naast de zorg voor continuïteit op de massale heffing- en inningsprocessen die plaatsvinden binnen een degelijke, stabiele omgeving, wordt er tevens volop gewerkt aan modernisering van het IV- landschap. Dit gebeurt deels intern door gebruik te maken van de expertise die intern aanwezig is, maar ook door het aantrekken van (kant-en-klaar) oplossingen en expertise uit de markt. Functieomschrijving De afdeling IV –

Bekijk vacature »

C# Developer Research and Development - Delft

Vacature details Vakgebied: Software/IT Opleiding: Medior Werklocatie: Delft Vacature ID: 6307 Introductie C# Developer Research and Development - Delft - Onze klant is één van de meest innovatieve bedrijven in de region van Delft. Op dit moment zijn ze voor het innovatie centrum. In het innovatie centrum wordt gewerkt aan de nieuwste technieken voor navigatie software. R&D / C# / Pattern Recognition / Algorithms / 3d Data / DotNET Functieomschrijving Als C# Developer kom je te werken in een innovatief scrumteam. We ontwikkelen en door ontwikkelen de nieuwste technieken op het gebied van navigatie software. Deze software wordt onder andere

Bekijk vacature »

Applicatiebeheerder/ Ontwikkelaar

Dit ga je doen - Verantwoordelijkheid dragen voor het complexe applicatielandschap; - Schakelen met eindgebruikers en leveranciers; - Verdeling in werkzaamheden tussen dagelijks beheer ontwikkelen; - Het analyseren van de behoeften van gebruikers en het vertalen hiervan naar functionele specificaties voor de applicaties; - Actief bijdragen aan het leveren van passende oplossingen voor het applicatielandschap. Hier ga je werken Deze organisatie, gevestigd in de regio van Amsterdam is een van de meest toonaangevende mediaorganisaties in Nederland. Door de organisatiecultuur krijg jij veel ruimte om initiatief te nemen en zelfstandig aan het werk te gaan. Samen met het IT team zorg

Bekijk vacature »

Back end developer PHP, Laravel

Functie Jij komt te werken in ons webdevelopment team, wat bestaat uit 8 ervaren collega’s. Hiernaast hebben wij nog een team van 2 ontwikkelaars die aan native applicaties werken. Bij ons zijn er korte lijntjes en er hangt een gezellige informele werksfeer. Maar het belangrijkste is natuurlijk dat je aan geweldige applicaties zult gaan werken! Wij willen als organisatie niet te groot worden, we willen gewoon toffe dingen maken. Onze techstack bestaat momenteel uit: PHP, Laravel, Javascript, Typescript, Git, MySQL, Java, Kotlin, Xamarin. Samen met ons ga jij zorgen dat we puik werk leveren! Waarbij je bij elke fase in

Bekijk vacature »

Fullstack developer

Functie omschrijving Ben jij toe aan een nieuwe uitdaging en zou jij graag bij een platte maar informele organisatie werken? Voor een mooi softwarebedrijf in omgeving Gouda zijn wij op zoek naar versterking op de afdeling Software Development! Als Fullstack react.js developer wordt je bij dit bedrijf onderdeel van de volledige ontwikkeling van requirement tot oplevering! Onderdelen van jouw functie: Jouw focus ligt op de front end en alles wat daarbij komt kijken. Je gaat ontwerpen, ontwikkelen, testen en valideren. Je zult voornamelijk werken met React.js en Typescript. Maar ook Javascript, HTML en CSS komen aanbod. Daarnaast zal je ook

Bekijk vacature »
Tim

Tim

07/02/2009 16:50:00
Quote Anchor link
Heey allemaal,


Op dit moment ben ik me een beetje aan het verdiepen in het MVC pattern en zodoende heb ik een 'overzichtje' gemaakt van de verschillende 'lagen'. Dit heb ik in een diagram gezet en ik vroeg me af of het zo goed was. Daarom wil ik graag jullie commentaar hebben op het volgende diagram:

http://www.agenebbes.nl/MVC-pattern.png

Opmerkingen en (opbouwende) kritiek zijn altijd welkom!


Groetjes!
Gewijzigd op 01/01/1970 01:00:00 door Tim
 
PHP hulp

PHP hulp

22/12/2024 10:38:56
 

07/02/2009 16:51:00
Quote Anchor link
Tim schreef op 07.02.2009 16:50:
Heey allemaal,


Op dit moment ben ik me een beetje aan het verdiepen in het MVC pattern en zodoende heb ik een 'overzichtje' gemaakt van de verschillende 'lagen'. Dit heb ik in een diagram gezet en ik vroeg me af of het zo goed was. Daarom wil ik graag jullie commentaar hebben op het volgende diagram:

www.agenebbes.nl/MVC-pattern.doc

Opmerkingen en (opbouwende) kritiek zijn altijd welkom!


Groetjes!

Moet het per se in doc? Ik heb al zeven andere documenten open staan, daar raak ik al af en toe de weg in kwijt. Kan je het niet in een ander formaat doen? Of gewoon een webpagina? (Desnoods exporteer je het...)
 
Tim

Tim

07/02/2009 17:11:00
 
Jelmer -

Jelmer -

07/02/2009 17:20:00
Quote Anchor link
Volgens mij heb je daar inderdaad een mooie uitwerking van het MVC model.

Alleen de controller moet volgens mij nog ietsjes dikker. Het model doet slechts de business logic, niet alle logica. Topics ophalen, beslissen of een bepaalde post een geldige post is en eventueel of een bepaalde gebruiker het recht heeft een bepaalde post op te slaan zou ik onder het model laten vallen. Maar het inloggen, welke methods van het model aangeroepen moeten worden wanneer er een formuliertje is gepost, en welke views moeten worden gebruikt zou ik in de controller onderbrengen. Dat is meer specifiek voor de applicatie, en kan je waarschijnlijk niet hergebruiken in een andere applicatie.

Het model daarentegen zou zo algemeen moeten zijn dat iedere applicatie die die bepaalde data aanspreekt er gebruik van zou moeten kunnen maken. Of die applicatie nu een daemon, of een cli programmaatje, of een GTK programmaatje, een webservice of een website is. Als al die verschillende interfaces (applicaties is een beetje ambigu hier. Applicatie in de zin van programma, of in de zin van groep programma's en services die samen een bepaalde dataset beheren) gebruik kunnen maken van dezelfde implementantie van het model, dezelfde implementatie van je business logic... volgens mij is dat ideaal. Minder kans op fouten, minder dubbele code, business logic maar op 1 plek hoeven aanpassen en maar één implementatie ervan te hoeven testen.

Zo gezien heb je eigenlijk meer een scheiding tussen Model en Controller+View dan tussen de drie apart. Controller + View zorgt voor de weergave, en Model voor de data.
 
Tim

Tim

07/02/2009 17:25:00
Quote Anchor link
Nieuwe png geupload aan de hand van de opmerkingen van Jerlmer:

http://www.agenebbes.nl/MVC-pattern.png

Bedankt voor je opmerkingen!
Gewijzigd op 01/01/1970 01:00:00 door Tim
 
Bo az

Bo az

07/02/2009 17:25:00
Quote Anchor link
De naam router vind ik daar een beetje raar gekozen, ik zou het eerder front controller noemen, het zelfde als het design pattern wat je daar kan implementeren: http://wiki.phpfreakz.nl/FrontController
 
Tim

Tim

07/02/2009 17:28:00
Quote Anchor link
De naam router had ik gekozen naar aanleiding van een 'tutorial' op sitemasters.be (http://www.sitemasters.be/tutorials/4/1/509/nieuw/MVC_pattern_uitgelegd), dus zodoende...

Toch bedankt voor je opmerking!
Gewijzigd op 01/01/1970 01:00:00 door Tim
 
Jelmer -

Jelmer -

07/02/2009 17:39:00
Quote Anchor link
Ik noem het zelf ook altijd de router, als een onderdeel van de "eerste controller", wat je dan weer een frontcontroller zou kunnen noemen. Vanuit deze eerste controller vraag ik dan aan de router naar de controller die hij denkt dat er nodig is, op basis van de url en dan start ik die in.

Bij mij is het zo dat iedere controller een view teruggeeft, en binnen de view kan je weer andere controllers uitvoeren en daarmee andere views binnen die view inladen. De meeste views die ik heb zijn dan ook maar kleine dingetjes, zoals een lijst van alle contactpersonen, een detail-overzicht van één contactpersoon.

Bij mij is het dus zo dat de controller en de view heen en weer met elkaar communiceren (al kan de view alleen maar een andere controller aanroepen, en ook die aanroep loopt dan weer via de frontcontroller, maar buiten de router om)

Maar het model kan niet bij de controller of de view, en is zich ook niet bewust van het bestaan van die twee. Ik denk dat het pijltje van View naar Model omgedraaid zou moeten worden. View doet wel aanroepen naar Model, maar andersom niet.

Vraagje: Waar zou jij de authentificatie (het inloggen en ingelogd blijven) en de autorisatie (gebruiker mag a wel, b niet) doen?
 
Tim

Tim

07/02/2009 17:43:00
Quote Anchor link
Authentificatie zou ik waarschijnlijk doen met een Model (dus een herbruikbaar stuk) en een stukje Controller (applicatiespecifiek). Aangezien er altijd wel een kleine verandering zit in het gebruik, het aantal lagen van autorisatie en dergelijke zou dit naar mijn idee dus een combinatie van model en controller moeten zijn.

Waarschijnlijk een stomme / simpele vraag van mijn kant: Wat moet je nou eigenlijk aanroepen en doen in je index.php? Is dat dan alleen de frontend-controller / router en die regelt de rest van het werk? Of moet daar ook weer een algemene view aangeroepen worden die het weergeven van de specifieke views via een eventuele templateparser doet? Of kijk ik nou helemaal de verkeerde kant uit :-P ?
Gewijzigd op 01/01/1970 01:00:00 door Tim
 
Jelmer -

Jelmer -

07/02/2009 17:52:00
Quote Anchor link
Mijn meest succesvolle poging was een controller voor het in- en uitloggen, en in/om het model had ik een soort extra laag die de autorisatie regelde.

Aan die laag kon je dan een gebruiker toekennen, en van ieder object dat het model in ging (om op te slaan) of uit kwam (wanneer het werd opgevraagd) werd gecontroleerd of de toegekende gebruiker het mocht lezen of wijzigen.

Het leuke was dat je hele specifieke regels aan deze laag kon toekennen. "Gebruiker a mag alleen objecten waarvan gebruiker_id gelijk is aan dat van zichzelf aanpassen." En omdat alle data via de model laag werd opgehaald, was het gewoon niet mogelijk om voorbij de autorisatie laag te komen. Ook leuk is dat je er in de rest van je controller en view niet meer naar om hoeft te kijken. Hoogstens een extra exception verwachten.

Probleem was dan weer bijvoorbeeld het inloggen zelf. Gasten mogen niet gebruiker-objecten bekijken, maar om in te loggen moet ik toch een gebruiker-object uit het model halen.

edit: Ik heb in mijn index.php de configuratie staan. Ik definieer de routes van de router, instantiëer de front-controller (die dan weer de router slikt als argument) en start de front-controller zodat die aan de router gaat vragen welke controller hij moet uitvoeren. Daarna geeft de front-controller uiteindelijk een view terug, en die "draw" ik dan waarna de HTML (of PDF, ligt eraan wat voor view er eigenlijk is teruggekomen) dus naar de gebruiker terug wordt gestuurd.

Je kan er nog voor kiezen om in je front-controller een extra view-laag te maken, waarbij de front-controller dus de view die hij terug krijgt van de controller die hij van de router moet uitvoeren binnenin zijn eigen view gaat tekenen. Die view van de front-controller kan dan bijvoorbeeld de layout-laag zijn. Hoofdnavigatie, breadcrumbs, footer, etc. Zo doe ik het zelf.
Gewijzigd op 01/01/1970 01:00:00 door Jelmer -
 
Tim

Tim

07/02/2009 19:54:00
Quote Anchor link
Thans voor je reactie!

Toch nog even een vraagje: Hoe gebruik je die view dan, instantieer je die in de controller, of geef je die al mee als argument?
 
Jelmer -

Jelmer -

07/02/2009 20:12:00
Quote Anchor link
Ik instantieer ze in m'n controllers, en koppel ze dan weer aan variabelen van andere views zodat je een hele constructie van views en subviews krijgt. Net als bij een desktop applicatie. Iedere controller geeft een view terug. En die view kan dan weer een compositie zijn van andere views.

Voordeel van deze aanpak is dat je allemaal kleine views kan maken voor bepaalde stukjes, en die dan weer overal kan hergebruiken. Het nadeel is dat het soms best chaotisch kan worden, en in de situatie waarin er een view is die niet samen gaat met de anderen.

Denk bijvoorbeeld een een view die met gd een grafiek tekent. Deze kan je niet mixen met views die HTML produceren. Op een of andere manier zal de grafiek-view omhoog in de hiërarchie van views en subviews bekend moeten maken dat hij alleen, zonder anderen om zich heen, weergegeven wil worden.

Gewoon een algemeen view-object in je applicatie hebben is ook niet vreemd. Je controller vertelt die view dan welk template hij in moet laden, welke variabelen hij eraan moet koppelen. Zend Framework onder andere doet het zo volgens mij. Het voordeel hierbij is de simpelheid, maar ik weet niet hoe het gaat wanneer je je applicatie zo maakt dat iedere controller z'n eigen kleine dingetje doet, en je meerdere controllers per pageview nodig hebt. Ik kan me voorstellen dat dat vrijwel onmogelijk wordt, omdat je de nauwe band tussen controller en view kwijt bent. Ik gebruik zelf altijd de eerste manier die ik had beschreven, en tot op heden is me dat redelijk goed bevallen (al is het niet ideaal)
 
Tim

Tim

07/02/2009 21:50:00
Quote Anchor link
Duidelijke uitleg, dank je! Ik zal ze snel allebei eens uit gaan proberen!
 
Tim

Tim

07/02/2009 22:11:00
Quote Anchor link
Is het ook de bedoeling dat je in een bepaalde controller kijkt of er bijvoorbeeld een formulier is meegezonden en op deze waarden een validator loslaat? Of is dit iets dat gewoon in de index.php moet gebeuren?

Gelieve Niet Bumpen::
Twee of meer keer achter elkaar in een topic posten heet bumpen. Bumpen is pas na 24 uur toegestaan en kan een reden zijn voor de admins en moderators om een topic te sluiten. Gebruik indien nodig de Afbeelding knop om je tekst aan te passen.

SanThe.


Edit:

Sorry!
Gewijzigd op 01/01/1970 01:00:00 door Tim
 
Jelmer -

Jelmer -

07/02/2009 22:58:00
Quote Anchor link
Ik heb het zelf zo gemaakt dat ik in een (voor dat formulier specifieke) controller inderdaad kijk of er een formulier is meegezonden, en zo ja, dan vul ik een object met die waarden. (Een object is zo'n ding dat data uit het model representeert, bijvoorbeeld een instantie van een Contactpersoon)

Mijn model vereist van ieder object dat het zichzelf geldig verklaart. Met andere woorden, voordat $object->save() doet wat het moet doen, roept het intern eerst $object->is_valid() aan, wat al de properties van het object naloopt, en al dan niet een array met foute properties en hun "meldingen" teruggeeft. Die array gebruik ik dan weer in m'n formulier om eventuele foutmeldingen weer te geven bij de velden die die properties verzorgen.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
try {
    $object->property = $_POST['property'];
    $object->save() {
        // binnen save()
        $object->_validate() -> array()
        if array# > 0 then throw Exception(array)
        else $object->_insert()
    }
    $view->success = true;
} catch(Exception $e) {
    $view->error = $e;
}
Gewijzigd op 01/01/1970 01:00:00 door Jelmer -
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.