MVC Routing

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Software Developer C# .NET

Functie omschrijving Zoek jij een nieuwe uitdaging binnen development waar je komt te werken binnen een flexibel, jong en ondernemend bedrijf? Wij zijn voor deze functie op zoek naar een C# .NET Developer die enthousiast wordt van het aansluiten en begeleiden van (complexe) nieuwe klanten. Verder begeleid je complexe projecten, ben jij iemand die altijd kansen ziet? Dan zoeken wij jou! Verder ga jij je bezighouden met: Het verbeteren van functionaliteiten binnen het dataplatform; Meedenken in oplossingsrichtingen; Werken aan de architectuur; Ontwikkelen van nieuwe technologieën. Bedrijfsprofiel Waar ga je werken? De organisatie waar je voor gaat werken heeft een onafhankelijk

Bekijk vacature »

Senior Front-end Developer

Dit ga je doen Met behulp van diverse programmeertalen ontwikkelen van Front-end software; Het begeleiden van het front-end team; Het oplossen van incidenten; Het bijhouden van een backlog; Je hebt een actieve bijdrage in de wekelijkse overleggen met de omliggende teams; Je houdt trends bij en adviseert het management hierover waar nodig; Helder communiceren met de stakeholders om hen zo mee te nemen in projecten en laten inzien wat de duur en toegevoegde waarde van bepaalde projecten is. Hier ga je werken Deze organisatie heeft circa 40 miljoen bezoekers per maand en heeft innovatie hoog in het vaandel staan. Het

Bekijk vacature »

Junior Java Developer

Dit ga je doen Je ontwikkelt innovatieve, maatschappelijk belangrijke applicaties; Je implementeert nieuwe features; Je gaat in gesprek met eindgebruikers en designers om de applicaties continu te finetunen; Je draait mee in een professionele Agile/Scrum omgeving. Hier ga je werken Onze klant is een internationale organisatie gevestigd in de omgeving van Amsterdam. Ze staan zeer goed bekend in de markt door hun innovatieve dienstverlening op IT gebied en hun gepassioneerde werknemers. Voor hun inspanningen op het gebied van IT hebben ze meerdere prijzen gewonnen! Onze klant is onderdeel van een Corporate werkgever en heeft zelf 300 mensen in dienst. Om

Bekijk vacature »

Junior PHP ontwikkelaar

Functie Wij hebben onlangs onze eerste collega’s aangenomen, waardoor ons development team momenteel uit 4 personen bestaat. We bouwen onze software op basis van een PHP-framework (wat op zichzelf een Symfony framework is). Qua ontwikkeling focussen wij ons op 3 focus velden; – API-ontwikkeling/ Component Creatie – Implementatie – Framework ontwikkeling; het toevoegen van nieuwe functionaliteit of interne microservices Onze senior software engineer focust zich momenteel op de laatste twee punten, maar wij komen handen te kort op het eerste veld. Daarom zijn wij op zoek naar een enthousiaste junior software engineer die graag de kneepjes van het vak wil

Bekijk vacature »

Ventilatiesysteem Productontwikkelaar HBO WO Verwa

Samengevat: Zij bieden flexibele ventilatiematerialen, geluidsdempers, rookgasafvoer producten en industrieslangen. Ben jij een technisch productontwikkelaar? Heb jij ervaring met het ontwikkelen van nieuwe producten? Vaste baan: Technisch Productontwikkelaar HBO WO €3.000 - €4.000 Zij bieden een variëteit aan flexibele ventilatiematerialen, geluiddempers, rookgasafvoer producten, industrieslangen en ventilatieslangen voor de scheepsbouw. Met slimme en innovatieve materialen zorgen wij voor een gezonde en frisse leefomgeving. Deze werkgever is een organisatie die volop in ontwikkeling is met hardwerkende collega's. Dit geeft goede ontwikkelingsmogelijkheden. De branche van dit bedrijf is Techniek en Engineering. Functie: Voor de vacature als Technisch Productontwikkelaar Ede Gld HBO WO ga

Bekijk vacature »

Programmeur / Developer

Voor een familiebedrijf in Doetinchem, actief in de machinebouw voor de food-sector, zijn wij op zoek naar een programmeur / developer. In deze functie ben je werkzaam in een team van 5 medewerkers. Je werkzaamheden bestaan onder andere uit het verhelderen van requirements vanuit de opdrachtgever, de klant en de afdeling ontwikkeling. Je verricht haalbaarheidsstudies en werkt specificaties uit die je afstemt met de opdrachtgever. Je ontwerpt design in software en stemt af met je collega's. De huidige vision-systemen zijn geschreven in C software, welke draait op een CUDA platform. Je schrijft en codeert software en zal gaan testdraaien. Tot

Bekijk vacature »

C++ Ontwikkelaar

Functieomschrijving Ben jij als software ontwikkelaar toe aan een nieuwe uitdaging? Dan zoeken wij jou! Voor het maken van de procesbesturingssoftware gebruiken onze projectteams een in C++ en C# geschreven tool. Dit is een gedistribueerd object framework wat alle kernfuncties biedt voor een procesautomatisering. Verder zullen jouw werkzaamheden o.a. bestaan uit: Ontwerpen, programmeren en testen van product aanpassingen; Analyseren van vragen en wensen van gebruikers en deze vertalen naar een functioneel ontwerp; Inzichtelijk maken van voortgang omtrent softwarewerkzaamheden, o.a. door middel van SCRUM; Continu toetsen van het effect van nieuwe releases op andere tools en processen; Implementeren van nieuwe product

Bekijk vacature »

Medior/senior Back-end developer gezocht!

Functie Vanwege de groei binnen het bedrijf zijn we op zoek naar versterking in het devlopmenttean. Als back-end developer bouw je aan de bedrijfssoftware die ons helpt bij de primaire processen. Een leuk (intern) project dus waarbij je de software continu doorontwikkeld! Je werkt in een klein team, we hebben dagelijks stand-ups en iedere twee weken een scrum-sessie, begeleid door onze Scrum Master. Hierin krijg je uitgebreid de kans om je ideeën te presenteren, en te overleggen met je mede-ontwikkelaars en de Product Owner. Binnen de ontwikkelteams gebruiken we Trello, Gitlab, Jiira, Confluence en Boockstack. Hiernaast werken ze met de

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 »

Digitale Tovenaar Gezocht: Junior Low-code/No-code

Bedrijfsomschrijving Duik mee in een wereld vol innovatieve avonturen waar gegevens en technologie een magische symbiose aangaan! Al meer dan twee decennia lang zijn we de tovenaars achter de schermen die oplossingen creëren voor de meest complexe klantcontactvraagstukken en datagedreven software-uitdagingen. Bij ons draait het om de kracht van samenwerking en groei. We zijn een hechte vriendengroep die samen bergen verzet om elkaar én onze klanten te laten schitteren. Jouw succes is ons succes en we streven ernaar om elkaar naar nieuwe hoogten te tillen, niet voor even, maar voor altijd. We willen dat jij je helemaal thuis voelt in

Bekijk vacature »

Remote - Front-end Angular developer

Functie The IT team currently consists of the IT Manager, 2 back-end developers, 1 full-stack developer, 1 designer, and a DevOps engineer. They are currently looking for an experienced Front-end developer who will work autonomously and in a disciplined manner, being the only developer working on their Front-end applications at the start. They do have the ambition to find a second developer soon, who you will then be able to supervise. You will be working on the further development of their existing UI in Angular. But also developing a mobile app. They place great value on User Experience and opt

Bekijk vacature »

Oracle APEX developer

Wat je gaat doen: Als Oracle APEX ontwikkelaar bij DPA werk je samen met collega’s aan de meest interessante opdrachten. Je zult je ervaring met SQL, PL/SQL, JavaScript, HTML en CSS inzetten om wensen van opdrachtgevers te vertalen naar technische oplossingen. Je werk is heel afwisselend, omdat DPA zich niet beperkt tot een specifieke branche. Zo ben je de ene keer bezig binnen de zorgsector, de andere keer is dit bij de overheid. Wat we vragen: Klinkt goed? Voor deze functie breng je het volgende mee: Je hebt een hbo- of universitaire opleiding afgerond Je hebt 2 tot 5 jaar

Bekijk vacature »

Front end developer React

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 »

Database Developer

Functieomschrijving Heb jij ongeveer 3 jaar ervaring als Database Developer met MS SQL of een vergelijkbare database? Wil jij werken voor een ambitieuze werkgever in regio Tilburg waar jij volledig de mogelijkheid krijgt jezelf te ontwikkelen? Lees dan snel verder! Hoe ziet jouw takenpakket eruit? Je gaat projecten gedurende het hele proces begeleiden. Je sluit aan bij afspraken met klanten om hun processen helder te krijgen. Vervolgens voer jij het project uit en zorgt dat dit zo goed mogelijk verloopt; Je werkt aan nieuwe softwareoplossingen die de logistieke processen verbeteren of vernieuwen; Je houdt je bezig met het ontwikkelen van

Bekijk vacature »

Front-end developer (HTML, CSS, SASS, JavaScript)

Functie Momenteel zijn we voor ons Digital team op zoek naar een (medior) Front-end developer. Samen met je collega’s werk je in een Agile/Scrum omgeving aan de ontwikkeling van onze webapplicaties, websites en andere oplossingen. Je draagt bij aan een sterk ontwikkelproces waarin kwaliteit voorop staat. Hiervoor ben je niet alleen bezig met eigen code maar ook code reviews van andere collega’s. Ben jij graag op de hoogte van de nieuwste ontwikkelingen in je vakgebied en wil je deze toepassen voor diverse projecten? Dan komen wij graag met je in contact! Eisen • HBO werk- en denkniveau • Minimaal 2

Bekijk vacature »

Pagina: 1 2 volgende »

Roy B

Roy B

27/06/2014 19:44:24
Quote Anchor link
Ik ben bezig met het ontwikkelen van een eigen MVC. Via htaccess stuur ik alles door naar mijn index. Mijn index bepaalt vervolgens welke controller moet worden aangeroepen. Stel mijn url is /nieuws/nieuwsitem. In dit geval moet de NewsitemController worden aangeroepen om het nieuwsitem te tonen. Stel mijn URL is /over-ons. Dan moet de ContentController worden aangeroepen en een contentpagina getoond worden. Maar nu mijn vraag.. Hoe weet index welke controller moet worden aangeroepen?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
// index.php
$route = explode("/", $_SERVER["REQUEST_URI"]);
 
PHP hulp

PHP hulp

03/05/2024 16:07:46
 
Frank Nietbelangrijk

Frank Nietbelangrijk

27/06/2014 22:02:24
Quote Anchor link
Door bijv. een array (van objecten) aan te maken met routes. Programmeer je in OOP of procedureel?

procedureel:
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
<?php

$routes
= array(
    array(
        'route' => 'nieuws',
        'controller' => 'Newsitem',
        'action' => 'index',  // welke method van de controller-class moet aangeroepen worden?
        'method' => 'GET'     // keuze uit GET en/of POST
    ),
    array(
        'route' => 'over-ons',
        'controller' => 'Content',
        'action' => 'index',
        'method' => 'GET'
    ),
};


?>


In plaats van de routes direct in een array te zetten kun je ook Yaml, XML of JSON gebruiken.
 
Roy B

Roy B

22/11/2014 17:40:21
Quote Anchor link
Frank Nietbelangrijk op 27/06/2014 22:02:24:
Programmeer je in OOP of procedureel?

Ik programmeer in OOP. Heb je daar ook een voorbeeldje van?
 
Dennis WhoCares

Dennis WhoCares

22/11/2014 21:04:10
Quote Anchor link
Zou je niet gewoon controllers maken van je pagina's ? En deze dezelfde naam geven als de URL[0] ?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
if(file_exists('controllers/' . $route[0] . '.php')) {
  require('controllers/' . $route[0] . '.php');
  //Controle of de Controller-class bestaat, anders doorsturen naar een 404 ???
  if(class_exists($route[0]))
    $this->controller = new $route[0];
  else
    header('location: 404.php');
} else {
  //Controller file bestaat niet, doorsturen naar een 404 ?
  header('location: 404.php');
}


Ik ben zelf ook nog altijd bezig met MVC te leren hoor.. Misschien heb je hier wat aan.
Gewijzigd op 22/11/2014 21:13:34 door Dennis WhoCares
 
Roy B

Roy B

23/11/2014 00:37:24
Quote Anchor link
Ik gebruik nu het volgende, maar ik ben van mening dat het nog stukke beter kan..

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
26
27
28
29
30
<?php
include "includes/config.php";

$route = explode("/", trim(strtolower($_SERVER["REQUEST_URI"]), "/"));

// Homepage
if(isset($route[0]) && $route[0] == "")
{

    $model = new HomeModel();
    $controller = new HomeController($model);
}


// Nieuws
if(isset($route[0]) && $route[0] == "nieuws")
{

    $model = new NewsitemModel();
    $controller = new NewsitemController($model);

    if(isset($route[1]) && $route[1] != "")
    {

        // Nieuws detail
        $controller->getByTitle($route[1]);
    }

    else
    {
        // Nieuws overview
        $controller->getAll();
    }
}

?>
Gewijzigd op 23/11/2014 00:38:42 door Roy B
 
Ward van der Put
Moderator

Ward van der Put

23/11/2014 06:37:15
Quote Anchor link
Het kan mooier door van de route ook een object te maken. En eigenlijk ook van het request. Alles is een object.

Verder laat je de applicatie nu allerlei models en controllers langslopen, maar kun je dat ook overdragen aan een front controller.

Schematisch krijg je dan zoiets:

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
<?php
// HTTP-verzoek
$request = new Request();

// Verzoek centraal opslaan
$registry = new Registry();
$registry->set('request', $request);

// Front controller
$front_controller = new FrontController($registry);

// Het verzoek bepaalt de route
if ($request->hasRoute()) {
    $route = $request->getRoute();
}
else {
    $route = new Route('error/404');
}


// Front controller zet andere controller aan het werk
$front_controller->dispatch($route);
?>


Je steekt daarnaast steeds een model in een controller, bijvoorbeeld:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$model
= new HomeModel();
$controller = new HomeController($model);

$model = new NewsitemModel();
$controller = new NewsitemController($model);
?>


Als elke FooController in jouw architectuur echter een bijbehorend FooModel heeft, kun je ook alleen de controller aanroepen. In MVC wil je liever alleen controllers met andere controllers laten communiceren. Jij hebt echter nu naast die bovenwereld nog een schaduwwereld: je moet parallel steeds alle models instantiëren voordat je überhaupt een controller aan het werk kunt zetten.

Afbeelding
Uit: HMVC: The layered pattern for developing strong client tiers

Verder is dat ook niet efficiënt. De controller bepaalt (bijvoorbeeld op basis van het request) of het model eigenlijk wel nodig is. Sommige models zijn slechts nodig als je een UPDATE of een INSERT wilt uitvoeren. Die models hoef je dus lang niet altijd te laden en te instantiëren.
 
Roy B

Roy B

23/11/2014 15:48:41
Quote Anchor link
Ward van der Put op 23/11/2014 06:37:15:
Je steekt daarnaast steeds een model in een controller

Hoe zou dat beter kunnen dan?
 
Ward van der Put
Moderator

Ward van der Put

23/11/2014 16:13:53
Quote Anchor link
Vuistregel: alleen de controller communiceert met het eigen model.

Alleen de controller weet waar Abraham de mosterd haalt. Dat kan bijvoorbeeld data uit een database zijn, maar diezelfde data kunnen ook uit een bestand komen, uit een cache, uit een cURL-request, enzovoort. Dat moet allemaal voorbij gaan aan andere objecten. Die spreken de controller gewoon aan en krijgen het antwoord dat ze verwachten.

Je hebt die regel nu omgekeerd met een "voorschrift": je instantieert eerst een model en schrijft dat vervolgens voor aan de controller door het te injecteren in de controller.
 
Roy B

Roy B

23/11/2014 16:31:30
Quote Anchor link
Ward van der Put op 23/11/2014 16:13:53:
Vuistregel: alleen de controller communiceert met het eigen model.

Alleen de controller weet waar Abraham de mosterd haalt. Dat kan bijvoorbeeld data uit een database zijn, maar diezelfde data kunnen ook uit een bestand komen, uit een cache, uit een cURL-request, enzovoort. Dat moet allemaal voorbij gaan aan andere objecten. Die spreken de controller gewoon aan en krijgen het antwoord dat ze verwachten.

Je hebt die regel nu omgekeerd met een "voorschrift": je instantieert eerst een model en schrijft dat vervolgens voor aan de controller door het te injecteren in de controller.

Hoe zou ik dat kunnen verbeteren dan?
Misschien een setModel() methode?
 
Ward van der Put
Moderator

Ward van der Put

23/11/2014 16:45:31
Quote Anchor link
Ja, prima oplossing.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

23/11/2014 17:07:16
Quote Anchor link
Dat is dan het MVC model waarin ik toch een ernstige tekortkoming zie. In Symfony bijvoorbeeld kun je gewoon vanuit de VIEW nog een andere controller aanroepen. Mijn ervaring is dat dat echt heerlijk werkt. Wat ik maar wil zeggen is dat het MVC niet heilig is en dat het mij persoonlijk om gebruiksgemak gaat. @Ward: Ik zie met die layers niet hoe je nu meerdere views in één response kunt verwerken. (Bijv. layer1 -> algemene pagina layout, layer 2 sidebar en layer 3 de specifieke content van de huidige pagina)
 
Ward van der Put
Moderator

Ward van der Put

23/11/2014 17:28:54
Quote Anchor link
Frank, het een sluit het ander niet uit.

Een view kán een controller aanroepen. Die doen dan plaatselijk in hun beperkte context hun eigen ding. Niets mis mee.

Voorbeeld: de view is een widget die een beoordeling in sterren toont. De view roept daarvoor een controller aan die de beoordeling "ergens" uit een model haalt. Maakt niet uit waar: het kan de eigen database zijn, maar ook een cURL-request naar KiyOh of iets dergelijks.

De complicatie is dat je dergelijke dingen moet samensmeden tot één fraaie webpagina. En dan komt het HMVC-model van pas, met meerdere hiërarchisch gestapelde MVC-componenten. Díé componenten moet je koppelen via hun controllers, niet via hun models.
 
Roy B

Roy B

23/11/2014 17:51:54
Quote Anchor link
Ward van der Put op 23/11/2014 16:45:31:
Ja, prima oplossing.

Kun je daar een voorbeeldje van geven?
Misschien zoiets?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
$controller = new NewsitemController();

$model = new NewsitemModel();
$controller->setModel($model);
Gewijzigd op 23/11/2014 17:52:20 door Roy B
 
Frank Nietbelangrijk

Frank Nietbelangrijk

23/11/2014 17:53:47
Quote Anchor link
Oké dus in een HMVC is het wel mogelijk om vanuit de view een andere controller in beweging te brengen. Dat je de controllers met elkaar koppelt dat klinkt wel logisch. Maar nu:

controller A wordt aangeroepen en die roept zijn eigen VIEW aan. Ik neem aan dat de VIEW niet direct output genereert maar eerder een response object vult en dit object dan weer teruggeeft aan de controller?
Daarna roept controller A controller B aan? Deze roept ook weer zijn VIEW aan en deze geeft ook een response object terug? Dan zitten we dus met twee response objecten??
 
Ward van der Put
Moderator

Ward van der Put

23/11/2014 18:14:33
Quote Anchor link
>> Dan zitten we dus met twee response objecten??

Yep, goed gezien, vooral dat zit in de weg.
Daarvoor hebben we dan een registry met één request en één response.

Daarom hebben we ook de neiging om het request/response-systeem te modelleren als een besturingssysteem.

1. Er komt één request binnen. Helder: dít is ons HTTP-verzoek, hier moeten we een antwoord op vinden.
Van dat request is er maar één, dus we hebben een uniek instance die we centraal kunnen registreren.

2. Van die request moeten onderdelen worden gedelegeerd aan specifieke controllers.
Hier komt het op creativiteit aan. Alleen de webdeveloper weet wat het systeem met specifieke requests moet doen.

3. Er komt één response uit.
We kunnen HTTP-output genereren of een HTTP-statuscode, maar veel alternatieven biedt HTTP ons niet.
De request wordt beantwoord met een response óf een code voor een ongeldig request.
 
Roy B

Roy B

23/11/2014 19:58:15
Quote Anchor link
Roy B op 23/11/2014 17:51:54:
Ward van der Put op 23/11/2014 16:45:31:
Ja, prima oplossing.

Kun je daar een voorbeeldje van geven?
Misschien zoiets?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
$controller = new NewsitemController();

$model = new NewsitemModel();
$controller->setModel($model);
 
Frank Nietbelangrijk

Frank Nietbelangrijk

23/11/2014 21:59:37
Quote Anchor link
Bedankt voor je heldere uitleg Ward. (Ben nog wel even aan piekeren hoe de developer dan zorgt dat dat ene response object dan bij de tweede en derde layer op de juiste manier uitgebreid wordt).

@Roy: In het systeem dat Ward beschrijft gaat het inderdaad om die manier. Ward geeft dat ook duidelijk aan:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$model
= new NewsitemModel();
$controller = new NewsitemController($model);
?>


Het enige verschil tussen jouw voorbeeld en die van Ward is dat Ward het Model aan de constructor meegeeft en jij daar een aparte method voor aanroept.

In andere MVC's wordt het model in de controller bepaald. Je krijgt dan zoiets:

dispatcher:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php

$route
= new Route('NewsItem', 'index');

$controllerName = $route->getController(); // geeft NewsItemController
$methodName = $route->getAction(); // geeft indexAction

$controller = new $controllerName();
$controller->$methodName($route->getVars());

?>


Controller:
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
<?php

class NewsItemController
{
    public indexAction($newsitem_id)
    {

        $model = new NewsModel();
        $newsitem = $model->getNewsItem($newsitem_id);

        $data = array(
            'newsitem' => $newsitem
        );
        
        return $this->loadView('newsItem', $data);
    }
}

?>
 
Roy B

Roy B

23/11/2014 22:07:28
Quote Anchor link
Het Model in de Controller meegeven is doorgaans de beste optie dan?
 
Frank Nietbelangrijk

Frank Nietbelangrijk

23/11/2014 22:18:08
Quote Anchor link
Het is een keuze denk ik. Ik zou het doen maar dat is omdat ik het op die manier gewend ben. Ward mag zijn methode nog eens onderbouwen ;-).

Het probleem waar ik een beetje tegen aanloop is welke method moet ik nu aanroepen in het Model van Ward.
Je krijgt namelijk het hele object geïnjecteerd in je Controller maar in dat object kunnen twintig verschillende methods zitten...
 
Ward van der Put
Moderator

Ward van der Put

24/11/2014 07:31:59
Quote Anchor link
Laten we ze dan eens vergelijken:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
// Variant A
$user_model = new UserModel();
$user_controller = new UserController($user_model);

// Variant B
$user = new User();
?>


Bij variant A moet je overal steeds in de weer met twee objecten: model en controller. Bij variant B heb je maar één API: je spreekt de controller aan en die zoekt verder zelf maar uit of er een model nodig is, hoe dat model er uitziet en hoe met het model wordt gecommuniceerd.

Bij variant A kun je makkelijker verschillende combinaties van models en controllers maken, wat met name bij frameworks handig kan zijn. Je zou in het voorbeeld UserModel door AdminModel kunnen vervangen. Bij variant B is die logica verborgen, wat zowel een voordeel als een nadeel kan zijn.

Variant B leent zich ook wat beter voor het inzetten en veranderen van design patterns: een blanco new User() kun je op verschillende manieren bouwen, terwijl er bij een new User(\UserModel $model) al veel meer is voorgeschreven.

Het is dus inderdaad een keuze.
Gewijzigd op 24/11/2014 07:32:29 door Ward van der Put
 
Ozzie PHP

Ozzie PHP

24/11/2014 12:51:41
Quote Anchor link
Heren, interessante discussie.

Ik zal ook even een spreekwoordelijke duit in het spreekwoordelijke zakje doen.

Wanneer geven we waardes of een object mee aan de constructor? Op het moment dat een class kan werken met dynamische data. Zo kan een database class via de constructor verschillende "verbindingsobjecten" binnenkrijgen om zodoende met verschillende databases contact te kunnen maken, en een e-mailer class kan bijvoorbeeld verschillende e-mailadressen ontvangen om naar verschillende personen te kunnen mailen.

Praten we over een model, dan ligt de situatie echter wat anders. Mijns insziens is een model niets meer dan een verlengstuk van een controller. De code die in het model staat, zouden we ook rechtstreeks in de controller kunnen plaatsen, maar dat doen we niet omdat we alles netjes gescheiden willen houden. En ... mochten we ooit een ander model gaan gebruiken, dan hoeven we niet alle code in de class zelf aan te passen.

Het klinkt natuurlijk leuk om het model via de constructor mee te geven, want dan hoeven we de class nooit aan te passen als we een ander model willen gebruiken. Maar ... is het logisch? Ik vind van niet. Een model is namelijk afgestemd op de controller. De controller en het model zijn onlosmakelijk met elkaar verbonden. Ze horen bij elkaar. Ze zijn als Bert en Ernie, of als Bassie en Adriaan ... maar net waar je zelf de voorkeur aan geeft. Het is dan ook vreemd om van buitenaf te gaan bepalen welk model er nodig is. Dat hoort niet. Als "buitenstaander" praat je enkel met de controller, en die controller bepaalt zelf welk model er nodig is. Het is de controller die dit bepaalt, en niet de "buitenstaander".

Op het moment dat je een AdminModel wilt gebruiken in een UserController zoals Ward hierboven aangeeft, zou het raar zijn om als "buitenstaander" zelf een model te kiezen en dat mee te geven aan de constructor van de UserController. Wie zegt dat de UserController wel overweg kan met dat door de "buitenstaander" gekozen model? Logischer zou het dan zijn om in de constructor van de UserController een parameter in te bouwen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php

public function __construct($is_admin = false) {
    if ($is_admin) {
        $this->model = AdminModel;
    }
else {
        $this->model = UserModel;
    }
}


?>

Op deze manier houd je de beslissingsbevoegdheid bij de controller zelf.

Bottomline: als "buitenstaander" praat je enkel met de controller, en beslis je niet welk model de controller moet gebruiken. Deze bevoegdheid ligt bij de controller zelf.

Amen ... :)
 

Pagina: 1 2 volgende »



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.