[OOP] Domain object van éne controller naar andere
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!
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.
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?
• 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).
Bovenstaand verhaal is inderdaad niet erg moeilijk maar ik zit met twee controllers of is dat fout?
Jasper DS op 21/03/2013 19:07:06:
Hoe zien die controllers er nu uit?Bovenstaand verhaal is inderdaad niet erg moeilijk maar ik zit met twee controllers of is dat fout?
Code (php)
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
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();
}
}
?>
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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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]
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