[OOP] MVC: Volgorde aanroepen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

OutSystems Developer

Dit ga je doen Het van scratch af aan ontwikkelen van applicaties met OutSystems; Het aanhaken bij diverse projecten binnen de organisatie; Schakelen met de business; Meedenken over de mogelijkheden van het platform binnen de organisatie. Hier ga je werken Deze organisatie is een toonaangevende speler in de vastgoedbranche en telt momenteel ruim 500 medewerkers. Met meer dan 150 applicaties staat er een complex applicatielandschap, bestaande uit standaard- en maatwerkapplicaties. De maatwerkapplicaties worden ontwikkeld door een inhouse development team. Het doel voor de komende periode is het verder vernieuwen en optimaliseren van het huidige applicatielandschap. Zo staat de organisatie aan

Bekijk vacature »

Software Developer

Dit ga je doen Je bent verantwoordelijk voor de warehouse applicatie die een integratie heeft met de PLC laag; Je ontwikkelt in C#/.Net; Je werkt mee aan de migratie naar .NET 6; Je bent verantwoordelijk voor het ontwikkelen van interfaces en het visualiseren van componenten; Je denkt mee over het design voor business oplossingen; Je bent verantwoordelijk voor het testen van de gebouwde oplossing. Hier ga je werken Voor een internationale organisatie in de transport zijn wij momenteel op zoek naar een Software Developer. Zij zijn wereldwijd de grootste speler en lopen voorop met het automatiseren van alle processen van

Bekijk vacature »

Front end developer

Functie Jij als front end developer gaat werken binnen de teams van onze klant, uiteraard met alle moderne technieken. Opdrachten worden echt gericht op jouw leerdoelen en jouw behoeftes. Wij hebben een omgeving gecreëerd waarin je echt jezelf kan zijn en waar echt gekeken wordt naar jouw voorkeuren. Maak je een fout? Geen probleem, leer ervan en dan ga weer door. Door de variëteit aan werk kun je in verschillende omgevingen een kijkje nemen en dus jezelf snel ontwikkelen. Eisen Je bent communicatief vaardig en houdt van een dynamische omgeving Je hebt HBO werk- en denkniveau Je hebt gedegen kennis

Bekijk vacature »

Java developer

Als Java Developer bij Sogeti ben je onderdeel van onze toonaangevende community die bestaat uit ruim 100 gepassioneerde Java professionals. In teamverband lever je mooie prestaties. Daarmee draag je aan bij de meerwaarde die wij leveren aan onze top-opdrachtgevers. Geen werkdag is hetzelfde! Je bent voortdurend bezig met het oplossen van allerlei complexe vraagstukken binnen bedrijfs kritische systemen voor onze klanten in regio Noordoost zoals DUO, ING, CJIB en Tendernet. Natuurlijk krijg jij de mogelijkheid je verder te certificeren in dit vakgebied. We organiseren regelmatig technische Meetups en doen veel aan kennisdeling. Sogetisten hebben plezier in hun werk en staan

Bekijk vacature »

Medior Java developer (fullstack)

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 »

C# .NET developer voor innovatieve applicaties gez

Bedrijfsomschrijving Deze werkgever houdt zich al ruim 20 jaar bezig met het ontwikkelen van innovatieve software en dat willen ze graag nog lang doorzetten. En dat merk je ook als je als .NET developer hier aan de slag gaat. De applicaties worden continu doorontwikkeld met altijd als uitgangspunt dat zowel de kwaliteit als het gebruikersgemak van hoog niveau is. Het bedrijf telt inmiddels ruim 25 medewerkers waarvan meer dan de helft op de development afdeling werken. Meer weten over deze werkgever? Mail naar [email protected] of bel 0657578548 Functieomschrijving Je komt te werken in een Scrum team met andere .NET developers

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 (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 »

Back-end developer (Magento2)

Functie E-commerce is een ‘’snelle’’ wereld. Om hierin continu voorop te blijven omarmen ze in een vroeg stadium nieuwe technieken. Een webshop is nooit af en kan altijd beter, sneller en efficiënter. Tegelijkertijd hebben ze vanaf hun oprichting altijd vastgehouden aan kwaliteit boven snelheid, en dit loont. Als back-end developer fungeer je als het verlengstuk van hun klanten. Technisch complexe zaken pak je met liefde op, en hierin werk je samen met o.a. front-end developers en designers. Klanten verwacht hierin kwaliteit van het hoogste niveau en een proactieve, meedenkende rol bij het maken van zowel technische als strategische keuzes. Ga

Bekijk vacature »

Team Lead/ Lead developer gezocht (Hands-on, PHP,

Functie Als Team Lead ben je de leider van één van de ontwikkelteams binnen de organisatie. Je leidt als lead developer een goed draaiend team dat werkt aan complexe en duurzame applicaties en API’s. Vanuit je kennis en ervaring ben je in staat het grote plaatje te blijven overzien, en kritisch mee te denken over bijvoorbeeld de architectuur, maar ook de algehele aanpak binnen het project. Je laat je team niet alleen technisch goed functioneren maar ben ook betrokken bij het menselijke aspect. Zo weet jij je collega’s te motiveren en begeleiden in hun dagelijkse werk. Buiten het team ben

Bekijk vacature »

Gezocht: Ervaren VB6 developer met C# ambitie!

Bedrijfsomschrijving Dit bedrijf is een vooraanstaande softwareleverancier die gespecialiseerd is in het ontwikkelen van software pakketten voor autoschade herstel bedrijven. De software wordt gebruikt door meer dan de helft van alle autoschade herstel bedrijven in Nederland. Het team van professionals is op zoek naar getalenteerde collega developers die hun vaardigheden willen inzetten om het bedrijf te laten groeien. Functieomschrijving Voor dit bedrijf zoek ik een ervaren VB6 / VB.NET developer met interesse om op termijn verder te gaan in C#. In deze functie ben je verantwoordelijk voor het onderhouden van de bestaande softwarepakketten. Een deel van de code is nog

Bekijk vacature »

Software Developer

Dit ga je doen Ontwerpen, ontwikkelen en onderhouden van (mobiele) internettoepassingen; Ontwikkelen en onderhouden van Microservices; Ontwerpen en optimaliseren van databases; Identificeren van nieuwe trends/ontwikkelingen binnen de branche. Hier ga je werken Deze marktleider op gebied van fietsen en fietservaring is gevestigd in twee provincies, verspreid over meerdere locaties. Jij zult voornamelijk in regio Joure aan de slag gaan. De organisatie doelt zich op het leveren van kwalitatief hoogwaardige producten aan alle hun klanten. De organisatie telt circa 4.000 medewerkers in meer dan 10 verschillende landen. Momenteel is de organisatie op zoek naar een Software Developer wilt meewerken aan het

Bekijk vacature »

Software developer

Functie Momenteel zijn ze op zoek naar een Software developer die, veelal fullstack, mee gaat werken aan de ontwikkeling van de producten en zo helpt aan de uitvoering van hun ontwikkelprojecten. Je komt te werken binnen hun development team bestaande uit 6 ontwikkelaars. Ze staan zowel open voor meer junior als medior/senior developers. Je kunt snel veel verantwoordelijkheid krijgen en doorgroeien binnen het bedrijf. Bovendien ben je betrokken bij het bepalen van de product roadmap en de inbreng van (nieuwe) technologieën. De applicaties waaraan je werk worden gebruikt op onderwijsinstellingen door heel Nederland. De tech-stack bestaat voornamelijk uit Laravel (PHP),

Bekijk vacature »

Senior Organisatieontwikkelaar

Als Organisatieontwikkelaar zorg je ervoor dat we in het magazijn van Coolblue altijd vooruit voetballen op het gebied Medewerker en Organisatie Ontwikkeling. Zo draag je bij aan een toekomstbestendig magazijn waar we klanten én medewerkers elke dag blijven verwonderen. Wat doe je als Senior Organisatieontwikkelaar bij Coolblue? Als Organisatieontwikkelaar werk je voor het magazijn van Coolblue. Je krijgt er energie van om continue te bouwen aan een toekomstbestendige organisatie. Dat doe je samen met 17 collega's in het HR-team, ieder met een eigen specialisme. Je werkt graag zelfstandig en je weet snel je weg te vinden als verandermanager. Ook ben

Bekijk vacature »

.Net Front-end Ontwikkelaar

Wij zoeken een .Net Front-end Ontwikkelaar! Omschrijving Kun jij snel schakelen en ben je stressbestendig? Dan zoeken wij jou! Als .Net Front-end Ontwikkelaar help je mee aan de webapplicatie die over de hele wereld door allerlei bedrijven wordt gebruikt. Je werkt daarnaast mee aan nieuwe en verbeterde functionaliteiten en helpt met het oplossen van bugs. Over de opdrachtgever Je komt te werken in een ambitieus team dat zich blijft ontwikkelen. Dit is alle informatie die we nu kunnen delen over de werkplek. Als jij de .Net Front-end Ontwikkelaar bent voor deze job, vertellen we je snel nóg meer. Eisen Heb

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

25/04/2024 23:59:32
 
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.