[OOP] Domain object van éne controller naar andere

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jasper DS

Jasper DS

21/03/2013 10:55:40
Quote Anchor link
Hallo,

ik heb een controller Articles met een functie viewAll. In die functie viewAll word een view aangesproken die alle Article (domain objecten = deel van de model) objecten print met behulp van een foreach.

Nu krijgt de gebruiker op die pagina een button met "buy this article". Die button verwijst naar de controller ShoppingCart met functie add(). Op welke manier zorg ik ervoor dat het juiste Article object bij de add functie geraakt? Ik zou een id kunnen meegeven en dan in de ShoppingCart terug alle gegevens kunnen ophalen maar kan dit niet sneller?

Bedankt!
 
PHP hulp

PHP hulp

01/10/2020 00:10:40
 
Ward van der Put
Moderator

Ward van der Put

21/03/2013 12:45:54
Quote Anchor link
Jasper DS op 21/03/2013 10:55:40:
Op welke manier zorg ik ervoor dat het juiste Article object bij de add functie geraakt? Ik zou een id kunnen meegeven en dan in de ShoppingCart terug alle gegevens kunnen ophalen maar kan dit niet sneller?

Dat moet inderdaad een unieke ID zijn (meestal een primaire sleutel zoals een artikelnummer), anders weet je immers niet wat je in het winkelwagentje stopt.

Maar wat bedoel je met "in de ShoppingCart terug alle gegevens kunnen ophalen"? Wat zijn "alle gegevens"? Veel meer dan een cart-ID (of sessie-ID), wat artikelnummers en bestelde aantallen heeft een winkelwagentje niet nodig.
 
Jasper DS

Jasper DS

21/03/2013 17:16:26
Quote Anchor link
Ja zoals ik het nu oplos zou ik het vroeger (zonder oop) ook opgelost hebben. Maar ik dacht hmm in de OOP wereld moet dit toch veel beter kunnen dus nu is mijn vraag hoe geef ik domain objecten door tussen controllers?
 
Ward van der Put
Moderator

Ward van der Put

21/03/2013 17:51:34
Quote Anchor link
De abstractie is niet zo moeilijk:

• object A (een view-control op een webpagina)
• gooit object B (het artikel)
• in object C (de winkelwagen)
• van object D (de bezoeker).

Misschien helpt deze bespiegeling je verder. Je moet bij OOP niet te abstract denken in “dingen”. Alles is namelijk een “ding”. En “dingen” kunnen “allerlei dingen doen” met “andere dingen”. Dat schiet lekker op.

Je krijgt een betere OOP-oplossing als je van die algemene gedachte afstapt en een concreet object concreet modelleert naar de werkelijkheid. Dan wordt vanzelf helder wat A t/m D moeten hebben (properties) en kunnen (methods).
 
Jasper DS

Jasper DS

21/03/2013 19:07:06
Quote Anchor link
Bovenstaand verhaal is inderdaad niet erg moeilijk maar ik zit met twee controllers of is dat fout?
 
Ward van der Put
Moderator

Ward van der Put

21/03/2013 19:12:26
Quote Anchor link
Jasper DS op 21/03/2013 19:07:06:
Bovenstaand verhaal is inderdaad niet erg moeilijk maar ik zit met twee controllers of is dat fout?
Hoe zien die controllers er nu uit?
 
Jasper DS

Jasper DS

21/03/2013 19:48:00
Quote Anchor link
ArticleController::show
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
31
32
33
34
35
<?php

namespace Jds\Controllers;
use Jframe\Controller\Controller;
use Jframe\View\View;

class ArticleController extends Controller
{
    public function showAll($args)
    {

        $model = new \Jds\Models\Article\ArticleMapper();
        $view = new View('Jds::ArticlesView');
        $view->setParam('pageTitle', 'Al onze producten');
        $view->setParam('articles', $model->getAll());
        $view->render();
    }


    public function show($args)
    {

        $view = new View('Jds::ShowArticleView');
            
            $model = new \Jds\Models\Article\ArticleMapper();
            $article = new \Jds\Models\Article\Article();
            $article->setId($args['id']);

            $model->findById($article);

            $view->setParam('article', $article = $model->findById($article));

            $view->setParam('pageTitle', $article->getName());

        $view->render();
    }
}

?>


ShoppingCartController::add
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
<?php

namespace Jds\Controllers;
use Jframe\Controller\Controller;
use Jframe\View\View;

class ShoppingCartController extends Controller
{
    public function view()
    {

    }


    public function add($args)
    {

        $articleMapper = new \Jds\Models\Article\ArticleMapper();
        $article = new \Jds\Models\Article\Article();
        $article->setId($args['id']);
        $article = $articleMapper->findById($article);
        var_dump($article);
    }
}
[
/code]
Gewijzigd op 21/03/2013 19:49:05 door Jasper DS
 



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.