[OOP] MVC-pattern

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Mendix Developer

Voor Troostwijk Groep zoeken wij een: Mendix Developer Wij zoeken Je bent een getalenteerde en ervaren Mendix Developer en het is tijd om je horizon te verbreden. Je wilt minder coderen en meer modelleren, minder bezig zijn met allerlei technische details en randvoorwaarden en meer met functionaliteit. Daarnaast ben je trots op de innovatieve en gebruiksvriendelijke applicaties die je in de loop van de jaren hebt gebouwd. Werk je graag in een enthousiast team, wil je veel vrijheid en kun je tegelijkertijd goed met deadlines omgaan, dan ben jij absoluut degene die wij zoeken! Wat je nodig hebt is ruime

Bekijk vacature »

Back-End Web Developer

As a Back-End Web Developer at Coolblue, you ensure that our webshops work as optimal as possible. How do I become a Back-End Web Developer at Coolblue? As a Back-End Web Developer you work together with other development teams to make our webshop work as optimal as possible and to make our customers happy. Although you are a PHP Developer, you also feel confident with setting up microservices in Typescript or are open to learning this. Would you also like to become a PHP Developer at Coolblue? Read below if the job suits you. You enjoy doing this Writing pure

Bekijk vacature »

Technical Asset Specialist Substations

TenneT is growing fast to realize its strategic ambitions. We play a leading role in driving the energy transition. We are looking for a passionate Technical Asset Specialist for substations (onshore and offshore) at our location in Arnhem who will contribute to this and that might be you? Your contribution to TenneT We are searching for a motivated and engaged colleague as a technical asset specialist (onshore and offshore) for instrument transformers and surge arresters, with preferably a strong background in the area of insulation coordination. As a specialist for insulation coordination you are responsible for overarching topics regarding insultation

Bekijk vacature »

Developer Angular & Kotlin

Dit ga je doen Het (door)ontwikkelen van mobiele apps en webapplicaties; Het opstellen van technisch ontwerp en het bespreken van ontwerpen met de software architect; Het uitvoeren van werkzaamheden op het gebied van technisch testen; Het in de gaten houden van nieuwe ontwikkelingen op jouw vakgebied en het adviseren van de organisatie hierover. Hier ga je werken Het gaat om een bekend internationaal handelsbedrijf met ruim 800 medewerkers, verdeeld over verschillende deelbedrijven. Deze organisatie is van oorsprong een familiebedrijf, er wordt hard gewerkt, er heerst een no nonsense en doeners mentaliteit, een informele sfeer en er is een mix van

Bekijk vacature »

.NET developer

Functie Als .NET developer wordt jij onderdeel van ons ICT team. In dit multidisciplinaire team ben jij samen met onze senior .NET ontwikkelaar en medior .NET ontwikkelaar verantwoordelijk voor ons ERP systeem. In dit systeem (Navision) ga jij leren ontwikkelen. Wij bieden jou dan ook een gedegen opleiding aan, samen met de ondersteuning van onze Senior .NET developer. Daarnaast ga jij aan de slag met ons portaal geschreven in Sharepoint. Verder ben jij verantwoordelijk voor EDI verkeer en het ontwikkelen binnen het ERP systeem en andere toepassingen en rapportages. Van jou wordt verwacht dat jij het proces goed leert kennen

Bekijk vacature »

Oracle APEX Ontwikkelaar (3.500-6.000 euro)

Bedrijfsomschrijving Ben jij een getalenteerde Oracle APEX ontwikkelaar met minimaal één jaar ervaring in het ontwikkelen van Oracle APEX-applicaties? Ben je gepassioneerd over het ontwikkelen van bedrijfskritische oplossingen en wil je werken bij een toonaangevend consultancybedrijf? Dan zijn wij op zoek naar jou! Deze organisatie beschikt over zowel inhouse als externe projecten, maar bovenal over een sterk team en netwerk van opdrachten waardoor jij jezelf verder kunt ontwikkelen. Het team bestaat uit een aantal junior en medior developers, maar vooral uit senioren. De business unit managers binnen het team zijn mensen die hun vak verstaan en zelf als Oracle APEX

Bekijk vacature »

Magento2 Developer

Functie Ben jij een ontwikkelaar en wil jij een volgende stap zetten en als teamlead aan de slag? Lees dan snel verder! Voor een gewilde opdrachtgever in omgeving Delft zijn wij op zoek naar een programmeur die als meewerkend voorman aan de slag wilt gaan. Een developer die een team van twee man aan zal sturen. Jouw werkzaamheden zullen er als volgt uitzien; Ontwikkelen en ontwerpen van API's; Maatwerkoplossingen; Databeveiliging; Optimalisatie webshops; Ontwikkelen technische implementaties voor verbetering database; Aanspreekpunt voor de organisatie en verantwoordelijk voor de aansturing van externe developers. Zoek je veel uitdaging en veelzijdigheid in je werk dan

Bekijk vacature »

Back end developer Digital Agency

Functie Wij zijn van origine een wordpress bureau, maar sinds 2006 zijn wij dit wel redelijk ontgroeid. Naar mate de jaren verstreken zijn we gegroeid in omvang, maar ook in de complexiteit van opdrachten waarin wij onze klanten kunnen bedienen. Momenteel bestaat onze organisatie uit 4 front end developers, 12 back end developer 3 projectmanagers en een 2 koppig management. Wij zijn een hele informele, bijna familiaire organisatie. Geen strak pak of overhemd, nee gewoon dragen waar jij je prettig bij voelt. De gemiddelde leeftijd ligt tussen de 25 en 30 en wij doen er veel aan om onze hechte

Bekijk vacature »

Softwareontwikkelaar Cleopatra

Functieomschrijving Voor de gemeente Amsterdam zijn wij op zoek naar een softwareontwikkelaar Cleopatra. De directie Verkeer en Openbare ruimte van de gemeente Amsterdam beschikt over een softwareapplicatie, "Cleopatra", waarmee geautomatiseerde handhaving plaatsvindt (op basis van kentekenherkenning) van bepaalde gebieden waarin toegangseisen worden gesteld aan het verkeer. Voorbeelden ervan zijn de milieuzones, de zone zwaar verkeer, handhaving van brom- en snorfietser op het fietspad en autoluwe gebieden. Voor de doorontwikkeling en uitbreiding ervan zijn gespecialiseerde softwareontwikkelaars nodig die helpen bij het programmeren van de handhavingsmodules voor nieuwe gebieden en het verbeteren en bijwerken van de bestaande onderdelen van de softwareapplicatie. Functie

Bekijk vacature »

Backend Developer Integraties API HBO REST

Samengevat: Deze werkgever is een IT-consultancy. Wil jij werken als Backend Developer Integraties? Heb jij kennis van gangbare berichtformaten? Vaste baan: Backend Developer Integraties API HBO €3.100 - €4.400 Zij bieden innovatieve oplossingen die bedrijven efficiënter en wendbaarder maken, waardoor onze klanten zich net zo snel kunnen ontwikkelen als de business van hen vraagt. Bij bij hun werk je aan onze eigen bedrijfsapplicaties. Je ontwikkelt met ons de meest nieuwe software. Wij blinken uit als het gaat om de inzet van technologie. Deze werkgever staat open voor elke nieuwe trend. Onze systemen zijn groot en ingewikkeld. Hou jij van diepgang

Bekijk vacature »

Fasttrack learning & development voor Java dev

Wat je gaat doen: Wij zoeken enthousiaste en ambitieuze junior en medior ontwikkelaars die toe zijn aan de volgende stap in hun carrière. Wij helpen je op je pad naar senior ontwikkelaar door ons fasttrack learning en development programma. Na een kort en intensief programma ga jij aan de slag bij klanten van DPA. Daarnaast krijg je veel ruimte om je te ontwikkelen als persoon en als specialist. De eerste maand gaan we aan de slag om je certificeringen te behalen waaronder OCP (Oracle Certified Professional). Daarnaast nemen we een deepdive in Spring Boot. Ook laten we je kennismaken met

Bekijk vacature »

Applicatieontwikkelaar ABAP

Bedrijfsomschrijving Functieomschrijving De kandidaat zal worden ingezet binnen een van de DevOps teams binnen SCI (Service Centrum Inburgering) voor het ontwerpen en bouwen in SAP ABAP van de binnen SCI gebruikte informatiesystemen. Voornaamste voorkomende werkzaamheden zijn het aanpassen van en bouwen van nieuwe programmatuur in ABAP (Objects), waarbij ook gebruikt wordt gemaakt van DDD (Domain Driven Design) en het opstellen/aanpassen van Functionele/Technische ontwerpen. Daarnaast moeten ook formulieren met SAP Smartforms worden aangepast. Verder speelt de overgang naar SAP4Hana en SAP CPI. Vanwege het veelvuldig gebruik van SAP PO is kennis hiervan een pré. Achtergrond opdracht Momenteel werken meerdere DevOps teams

Bekijk vacature »

Senior Lead Front End Developer

Functieomschrijving Voor Stichting Waternet zijn wij op zoek naar een senior Lead Front End Developer. Binnen het DevOps team Online zijn we op zoek naar een Senior Lead Front End developer met kennis van toegankelijkheid. Deze developer zal zich bezighouden met development van webpaginas die in verbinding staan met systemen uit het back office. Taken Ontwerpen, ontwikkelen, implementeren, documenteren en beheren van webapplicaties in een Azure-omgeving Debuggen, analyseren en oplossen van problemen in de OTAPomgevingen Je participeert in het DevOpsTeam Online voor het verder uitwerken en implementeren van gebruikerswensen Je bent betrokken bij toegankelijkheid audits en het implementeren van WCAG

Bekijk vacature »

.NET developer

Functie Als ervaren .NET ontwikkelaar ontbreekt er aan passie en motivatie niks. Jij bent communicatief sterk en pakt iedere uitdaging dan ook met beide handen aan. Op projectbasis ga jij met je team of met enkele andere ontwikkelaars intern aan de slag bij diverse partners. Op basis van het project ga jij aan de slag en zijn de werkzaamheden en technieken erg divers. Jouw werkgever stelt jouw ontwikkeling hierin voorop, zo krijg je een vast vertrouwenspersoon die één keer in de maand op locatie van jouw project zal kijken hoe het gaat en of er eventuele aandachtspunten zijn. Daarnaast krijg

Bekijk vacature »

Full stack 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 »
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

19/04/2024 01:46:30
 

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.