[OOP] MVC: Volgorde aanroepen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Java developer

Functie Je gaat aan de slag als Tester voor een aantal mooie projecten. Je komt terecht in een DevOps team waar jij aan de slag gaat om de kwaliteit te waarborgen omtrent de maatwerk software voor de klanten. Je draait je hand er niet voor om de adviserende rol te bekleden op het gebied van testautomatisering en het opzetten van testframeworks. Zoals aangegeven ga je daadwerkelijk in het eigen team aan de slag en is het daarnaast ook gebruikelijk bij de klanten op locatie te komen om te werken aan de opdrachten. Je krijgt zodoende echt een mooie kijk in

Bekijk vacature »

Senior .NET Developer I goed salaris en deels thui

Bedrijfsomschrijving Mijn opdrachtgever is al ruim 20 jaar een gevestigde naam in de wereld van software ontwikkeling, met drie kantoren in de Randstad, waaronder Alphen aan den Rijn. Zij richten zich op het bouwen van IT-oplossingen die ervoor zorgen dat de productiviteit van klanten te allen tijden optimaal is. Hiervoor neemt jouw nieuwe werkgever het volledige ontwikkelproces tot haar rekening; van het eerste gesprek om de klantwensen in kaart te brengen, tot aan het uiteindelijke onderhoud van de opgeleverde oplossing. In totaal werken er inmiddels bijna 200 gemotiveerde IT-ers binnen deze organisatie. De gemiddelde leeftijd ligt rond de 35. Het

Bekijk vacature »

Software Ontwikkelaar

Java/Kotlin Developer Ben jij een ervaren Java/Kotlin developer met een passie voor het automatiseren van bedrijfsprocessen? Wil je graag deelnemen aan uitdagende projecten bij aansprekende klanten? En ben je op zoek naar een professioneel, ambitieus en dynamisch bedrijf om je carrière verder te ontwikkelen? Kom dan ons team bij Ritense in Amsterdam versterken! Zo ziet de functie eruit: Als Java/Kotlin developer bij Ritense ben je verantwoordelijk voor de ontwikkeling en implementatie van applicaties die bedrijfsprocessen automatiseren, zodat onze klanten slimmer, efficiënter en klantgerichter kunnen werken. Als developer ben je in de lead en zorg je voor de correcte oplevering van

Bekijk vacature »

Junior Front end developer Onderwijssoftware

Functie Als Junior front end developer kom jij terecht in een klein, maar hecht team bestaande uit 5 andere developers (waarvan 2 senioren, 2 medior en 1 junior). Met de gezamenlijke missie om “ieder kind te helpen met onze software” wordt er dagelijks gepassioneerd en hard gewerkt aan ons in-house ontwikkeld platform. Deze software is gebaseerd is op AI, machine Learning en wetenschappelijke inzichten. Dagelijks zul jij werken met onze high traffic webapplicatie. We hebben ruim 300.00 gebruikers en meer dan 2 miljard records waar je te maken mee krijgt! Verder zul jij je bezighouden met: – Het ontwikkelen van

Bekijk vacature »

Lead developer

Functie Als lead developer wordt jij verantwoordelijk voor een van onze development teams. Samen met de Software Architect bewaak jij de kwaliteit en uitvoering van onze complexe vraagstukken. Daarnaast ben jij verantwoordelijk voor het inschatten, designen en ontwikkelen van middelgrote tot grote veranderingen in de software. Ook coördineer jij het proces rondom complexe technische vraagstukken. Verder bestaat jouw takenpakket uit het volgende: – Het aansturen van jouw development team; – Het begeleiden van Junior Software Engineers; – Het maken van technische analyses m.b.t. nieuwe aanvragen en het tijdsbestek inschatten voor de uitvoering hiervan; – Het uitvoeren van de ontwikkeling van

Bekijk vacature »

C# Ontwikkelaar

Functie omschrijving We are looking for a dutch native speaker Wil jij graag aan de slag als C# ontwikkelaar en jouw skills verder ontwikkelen? Zoek niet verder! Als C# ontwikkelaar ga je aan de slag met de volgende taken: (verdere) ontwikkeling van de software voor de interne processen binnen een .net omgeving; optimaliseren van de dataprocessing; ontwerpen en implementeren van zowel desktop- als web-programmatuur; ontwikkeling van tools ten behoeve van consultants en klanten. Bedrijfsprofiel Deze organisatie is gevestigd in de regio van Den Bosch. Zij ontwikkelen business intelligence software voor een specifieke branche. Dit houdt in dat zij dashboards ontwikkelen

Bekijk vacature »

(Junior) PHP Ontwikkelaar bij een retail bedrijf i

Bedrijfsomschrijving Ben jij een ervaren PHP ontwikkelaar met een passie voor retail en ICT? Wil jij werken in een team dat zich bezighoudt met het ontwikkelen van uitdagende applicaties voor een groot retailbedrijf in Delft? Dan zijn zij op zoek naar jou! Functieomschrijving Als PHP Ontwikkelaar werk je in een team aan de ontwikkeling van applicaties die door de gehele organisatie worden gebruikt. Je bent verantwoordelijk voor het ontwikkelen, testen en implementeren van deze applicaties. Je werkt hierbij nauw samen met andere ontwikkelaars, projectmanagers en stakeholders binnen de organisatie. Je taken bestaan onder andere uit: Ontwikkelen van nieuwe functionaliteiten en

Bekijk vacature »

Software developer (Python)

Functie Je komt te werken in het IT-team bestaande uit de Lead developer en 4 (medior/senior) developers. Gezamenlijk werken jullie aan de verbetering en uitbreiding van de software. Binnen het development team is er veel vrijheid en zelfstandigheid, zonder dat ze hiermee afdoen aan de kwaliteit. Zo hebben ze elke ochtend een korte stand-up (10:00 uur) en houden ze zo nu en dan pair-programming sessies. Ook is er een hele professionele ontwikkelcyclus waarbij code altijd eerst door een collega wordt getest voordat het naar deployement gaat. Je hebt in je werk oog voor kwaliteit, risico’s en het klantbelang. Communicatie met

Bekijk vacature »

Node.js developer

Functie Onder begeleiding van 3 accountmanagers waarvan er 1 binnen jouw expertise je aanspreekpunt zal zijn ga je aan de slag bij diverse opdrachtgevers. Hij of zij helpt je bij het vinden van een passende en uitdagende opdracht. Hierin houden ze uiteraard rekening met jouw situatie, ervaring en (technische) ambities. De opdrachten duren gemiddeld één tot 2 jaar. Hierdoor kun je je ook echt vastbijten in een project en als consultant impact maken. Naast de opdracht ben je regelmatig met je collega’s van de IT-afdeling om bijvoorbeeld onderlinge kennis te delen, of nieuwe trends te bespreken. Ook worden er regelmatig

Bekijk vacature »

Lead C++ Developer

De rol van Lead C++ Developer Als Lead C++ developer bij KUBUS word je verantwoordelijk voor het implementatie design van requirements en de software architectuur van de desktop applicaties van BIMcollab, ons platform voor 3D model-validatie en issue-management bedoeld om de kwaliteit van 3D design-modellen voor gebouwen te verbeteren. Betere 3D modellen leiden tot betere gebouwen, dus zo draag je bij aan verduurzaming van de gebouwde omgeving met slimmer gebruik van materialen, minder verspilling en energie-efficiënte gebouwen. Een goede gebruikerservaring staat bij ons hoog in het vaandel; we gaan in onze ontwikkeling voor innovatie en kwaliteit. In je rol als

Bekijk vacature »

Senior .NET Ontwikkelaar

In het kort Als Senior .NET ontwikkelaar ga je binnen onze business unit Transport en Logistiek aan de slag met complexe maatwerk software voor bedrijf kritische systemen binnen de technische automatisering. Denk bijvoorbeeld een IoT-oplossing voor de logistieke sector waarbij we van ruim 200.000 machines de telemetrie en events verwerken. We zijn actief in de distributielogistiek, havenlogistiek (denk aan ECT) en productielogistiek. Naast C# en .NET Core maken we ook gebruik van Azure technologie. En als trotse Microsoft Gold Partner leren we graag van en met jou. Wil jij jezelf blijven ontwikkelen binnen de technische automatisering met .NET, dan gaan

Bekijk vacature »

SQL developer

Functieomschrijving Voor een erkende werkgever in de omgeving van Tilburg zijn wij op zoek naar een ervaren SQL ontwikkelaar. Hier wordt jij mede verantwoordelijk voor zowel de design en implementatie van SQL-databases als voor het verstaan van de processen van klanten naar het vertalen van deze processen naar IT-oplossingen. Jouw takenpakket komt er als volgt uit te zien: Het ontwerpen en implementeren van databaseschema's: Je bent in staat om een database te ontwerpen en de structuur van tabellen, relaties, indexen en andere objecten te definiëren; Het schrijven van complexe SQL-query's: Je kunt complexe query's schrijven om gegevens uit de database

Bekijk vacature »

Consultant Low Code Developer

Functie omschrijving Heb jij verstand van datamodellering, NO CODE Platformen en kun jij het aan om projecten te leiden? Ben jij toe aan een nieuwe uitdaging en ben jij HBO afgestudeerd in de richting van IT? Voor een mooie opdrachtgever in omgeving Delft zijn wij op zoek naar een No Code developer die zich bezig gaat houden met het optimaliseren van bedrijfsprocessen bij klanten. Onderdelen functie Je gaat geen code kloppen maar bedenken hoe applicaties eruit moet komen te zien. Je gaat werken met een non code platform, je kunt denken aan Mendix of Betty Blocks. Je bent verantwoordelijk voor

Bekijk vacature »

Back-end Developer

Functieomschrijving Voor een erkende werkgever in de regio van Middelburg zijn wij op zoek naar een enthousiaste PHP / Symfony Developer. Een ambitieus persoon die het gemotiveerde development team komt versterken met het realiseren van nieuwe en complexe projecten. Ben jij op zoek naar een baan met veel uitdaging binnen een snelgroeiend e-commerce bedrijf, waar je de tijd en ruimte krijgt voor professionele groei? Dit ga je doen: Je bent verantwoordelijk voor de beheer en ontwikkeling van de serviceportal in Symfony en de webshops in de tweede versie van Magento; Je houdt je bezig met het ontwikkelen van nieuwe functionaliteiten;

Bekijk vacature »

Senior Software developer PHP

Functie Jij als senior PHP ontwikkelaar komt te werken in 1 van onze SCRUM teams. Momenteel werken er zo’n 30 developers binnen onze organisatie Jij gaat de brug zijn tussen het bouwen van verschillende functionaliteiten binnen onze applicaties en deze vervolgens te integreren in onze centrale hub. Je start je dag om 9 uur met een stand up en dan pak je je taken op voor de dag. Een greep van jouw taken zijn: – Het bedenken en uitbouwen van features binnen de verschillende applicaties – Onderhouden van CI/CD pipelines – Bezighouden met Security & Privacy Eisen • Minimaal 4

Bekijk vacature »
Tim

Tim

18/02/2009 19:43:00
Quote Anchor link
Heey allemaal,


Na nog wat verder te hebben gelezen over het MVC pattern, kan ik het allemaal even niet meer volgen. Vandaar dat ik de vraag heb of het volgende overzicht en naamgeving goed is:

1. De gebruiker komt op index.php/vbController/vbMethod;
2. In config.php wordt een view en database geselecteerd en in een global gezet;
3. In index.php wordt de FrontController aangeroepen;
4. De FrontController scheidt in de 'router' (naamgeving?) de link in de class 'vbController' en de methode 'vbMethod';
5. De router roept de dispatcher aan;
6. De dispatcher roept de juiste controller en methode aan;
7. In deze controller wordt de pagina 'gedirigeerd'. Andere classes (models) die nodig zijn worden aangemaakt, hierin worden bepaalde methodes aangeroepen. De nodige weergaves worden geplaatst in een globale view;
8. In index.php wordt de view 'gerenderd'. Dit gaat aan de hand van een template (smarty) met de naam van de controller en methode (vbController_vbMethod.tpl). Bestaat deze niet, dan wordt er een standaard template geladen.

Klopt het dat ik in deze acht stappen weergeef, hoe een 'request' vanaf de gebruiker een bepaalde weergave tot gevolg heeft?


Alvast bedankt!

Edit: Typo
Gewijzigd op 01/01/1970 01:00:00 door Tim
 
PHP hulp

PHP hulp

16/02/2025 13:46:40
 
Jelmer -

Jelmer -

18/02/2009 23:22:00
Quote Anchor link
Volgens mij is dit een redelijk goeie opzet voor een hedendaags MVC blokje om.

Ik heb alleen nog een beetje mijn twijfels over stap 5. Moet de router de dispatcher aanroepen, of zou het misschien een beter idee zijn om de router de combinatie van controller, method & argumenten weer terug te laten geven (als return value) aan de frontcontroller, welke dan vervolgens de dispatcher aanroept. Ik voel zelf meer voor die laatste volgorde, maar als je jouw volgorde kan verdedigen is dat ook prima natuurlijk.

Misschien is het nog handig om een globaal object beschikbaar te maken met verwijzingen naar helper-objecten. Bijvoorbeeld (weer terug) naar de router (je naamgeving klopt hier) zodat je die links voor je kan laten maken wanneer jij hem een controller-naam, method-naam en argumenten meegeeft. Je router weet immers het schema voor URL's, je templates in principe niet.

Als globaal object raad ik overigens het gebruik van een globale variabele af. Die dingen kan je veel te gemakkelijk "per ongeluk" overschijven, en je hebt niet zo veel controle erover. (ze zien er wel mooi uit in je code vind ik dan weer) Een register (oeh! design pattern alert! Google:registery pattern) zou je kunnen gebruiken, eventueel in combinatie met Singleton. (nog een design pattern, of naar mijn mening een anti-pattern maar goed)

Je kan ook een overkoepelend object maken, of je frontcontroller misbruiken, en iedere controller die je verder aanmaakt de instantie van je frontcontroller meegeven. Aan je frontcontroller hang je vervolgens je database, je view-object, je authorizatie-object (wat voor het ingelogd zijn zorgt) en al dan niet je model. Op die manier heb je overal waar nodig toegang tot die objecten, en hoef je niet naar enge dingen zoals singleton te grijpen.

(singleton is kut omdat het een oncontroleerbare globale state binnen je applicatie oplevert, en dat is iets waar je wel eens rekening mee zou moeten gaan houden, en dus is het niet leuk)
 
Lode

Lode

19/02/2009 00:28:00
Quote Anchor link
MVC en Smarty zou ik je dan absoluut willen afraden...

lees ook eens op: http://www.nosmarty.net/

De Dispatcher runt eigenlijk alles. De router is weer een tool om je urls, routes een extra dimensie te geven en dingen toe te voegen.
Het verzocht de routing van de uri/request naar de Applicatie/Page Controller en diens Action en eventuele parameters.

De Front controller maakt via het gehele verhaal een response object
Bestaande uit headers en een body, deze body is feitelijk je view in deze.
Er zijn veel meer soorten reponses, denk bijvoorbeeld ook aan een (mime) mail bericht.

In de config worden geen view en databases gezet.
Alleen variabelen. Zoals bijvoorbeeld database credentials. Etc...

In mijn eigen framework kan ik ook methods aanroepen vanuit de config.
Maar goed dat is niet de basis :-]

Singletons heb je nooit nodig!
Gewijzigd op 01/01/1970 01:00:00 door Lode
 
Martijn Wieringa

Martijn Wieringa

19/02/2009 10:06:00
Quote Anchor link
Wat betreft de originele post:

Bij mij zijn stappen 4 en 5 feitelijk 1... maar da's mijn oplossing.. opzich ziet het er prima uit!


Wat betreft MVC:

In mijn visie is het 'MVC'-model een hulpmiddel om zaken te structureren. Dit is met name handig wanneer er vele programmeurs werken aan dezelfde applicatie.

Je hoeft minder te klooien in andermans ontwikkelde code wat de kans op fouten sterk verminderd. Daarnaast kun je verschillende onderdelen los van elkaar verder ontwikkelen.

MVC heeft echter ook nadelen; zoals relatief veel meer overhead (data 'versturen' naar templates), en is (in mijn ogen) behoorlijk omslachtig op sommige punten zoals bij het uitwisselen van data tussen 'losstaande' objecten (iets waar bijv. Singletons vaak worden ingezet).
Gewijzigd op 01/01/1970 01:00:00 door Martijn Wieringa
 
Lode

Lode

19/02/2009 13:06:00
Quote Anchor link
En mag ik vragen welk framework je gebruikt dan Pholeron?
 
Martijn Wieringa

Martijn Wieringa

19/02/2009 16:49:00
Quote Anchor link
Een eigen ontwikkeld framework en bibliotheek aan functies.. Die werk d.m.v. de get variabelen de juiste view/action uitvoeren.

&core[view]=XXX&XXX[action]=YYY

Variabelen die door de 'core' worden ingelezen/weggeschreven gebruiken allemaal core[?], view specifieke variabelen in de URL gebruiken allemaal view[?]

Daarnaast gebruikt het framework zelf voor de meeste zaken geen OOP, maar binnen een view kun je vrij eenvoudig overschakelen naar een OOP aanpak. Elke view kan bijv. eenvoudig als class worden uitgewerkt..

Elke view retourneert een 'blok HTML code' (of REDIRECT de gebruiker) die door het framework binnen een template wordt geplaatst. Eventueel kan een view zelf CSS/JS files dynamisch toevoegen aan de output-buffer.
 
Tim

Tim

19/02/2009 18:55:00
Quote Anchor link
Bedankt voor jullie reacties, ik ga eens kijken hoe ik alles kan verwerken in mijn 'frameworkje'!

Bedankt!
 
Lode

Lode

19/02/2009 19:13:00
Quote Anchor link
Een view is juist geen class volgens mij.

Een file met html en overloaden framework functionaliteiten.

Hierdoor zijn templates overbodig geworden.
Wat weer een stuk snelheidswinst moet opleveren. Zeker als je een monster als smarty erbij zou hangen...
 
Tim

Tim

19/02/2009 19:17:00
Quote Anchor link
Wat bedoel je precies met 'Een file met html en overloaden framework functionaliteiten'?

Ik kan daarnaast begrijpen dat een 'bakbeest' als Smarty de snelheid van een applicatie niet ten goede kan komen. Maar aangezien ik niet zo één, twee, drie een andere MVC-waardige oplossing kan bedenken, zal er altijd iets in die trant nodig zijn.

Uitzondering hierop kan het voorstel van jouw (Lode) zijn, tenminste, als je bedoelt wat ik denk dat je bedoelt.
 
Jelmer -

Jelmer -

19/02/2009 20:13:00
Quote Anchor link
De view is niet een klasse of een bestandje, het is een laag in de opbouw van je applicatie, een laag met z'n eigen verantwoordelijkheden. De view-laag is er voor de presentatie van je data. Hoe je site eruit ziet, hoe de lijst met artikelen weergegeven wordt, maar ook hoe bijvoorbeeld een bedrag of een datum wordt weergegeven of een foutmelding is de verantwoordelijkheid van de view.

Hoe de view is opgebouwd maakt eigenlijk voor MVC niet zoveel uit. Belangrijk is dat je vanuit je controller met je view kan praten zonder dat de controller hoeft te weten wat de toestand van de view is. Is de view bijvoorbeeld een template-parser, geladen met template, of een XML writer, de interface die je vanuit de controller gebruikt zou hetzelfde moeten zijn.

Nu is het in de praktijk niet altijd even handig om _al_ het presentatie-gebeuren in de view-laag te regelen, maarhet is prima mogelijk wanneer je gewoon gebruik maakt van objecten, ook voor datums & bedragen. Ik streef er zelf altijd naar om zoveel mogelijk presentatie-gerelateerde dingen uit mijn model en controller te halen, en in de view-laag te stoppen.

Over de indeling van de view-laag; Alleen een PHP bestandje includen is naar mijn idee niet genoeg. Je hebt ook nog logica nodig om standaard-elementen, zoals het raamwerk om je content heen, te verzorgen. Om dat in iedere weergave (een blogpost tonen is een andere weergave dan zoekresultaten bijv.) dezelfde code voor dat raamwerk te herhalen lijkt mij niet nodig, en zelfs onprettig wanneer je dat raamwerk nu juist wilt veranderen, ingewikkelder wilt maken.

Wat Lode overigens bedoelt is volgens mij dit: Je gebruikt gewoon PHP als template taal. Zo krijg je een heleboel mogelijkheden voorgeschoteld in een taal die je al gebruikt, en waarvoor alle vertaal-stappen heel dichtbij zijn. Een mogelijke implementatie

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
class Template_Native {

    protected $_template_file;

    protected $_variables = array();

    public function __construct($template_file)
    {

        $this->_template_file = $template_file;
    }


    public function __set($key, $value)
    {

        $this->_variables[$key] = $value;
    }

    
    public function draw()
    {

        export($this->_variables);
        
        include($this->_template_file);
    }
}

?>


Template:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
Hallo <?=$naam?>;


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$view
= new Template_Native('template.phtml');
$view->naam = 'Jelmer';
$view->draw();
?>
Gewijzigd op 01/01/1970 01:00:00 door Jelmer -
 
Lode

Lode

22/02/2009 02:21:00
Quote Anchor link
De belangrijkste toepassing voor OOP in de view class is denk ik het gebruik van __call(){} om helpers dynamisch te kunnen gebruiken!

Ik heb er wel al eens over gepost hier.
Maar de zoekfunctie hier is zo brak....
 



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.