MVC en OOP

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Mr.Moe

Mr.Moe

05/01/2010 22:25:00
Quote Anchor link
Ga het proberen zo duidelijk mogelijk te maken.

Ok, ik ben begonnen met Kohana en dit is MVC gebaseerd.
Ik heb een pagina Producten (www.example.com/producten) door de router class wordt de pagina automatisch gemaakt door de producten controller.
Nu zouden alle hoofdcategorien te zien moeten zijn op deze pagina. Dat kan heel makkelijk door gewoon even een methode aan te spreken in mijn producten model en deze dan via mijn controller door te spelen aan de view.
Maar nu zou ik graag elke hoofdcategorie als een object zien, dus ik heb een aparte class aan gemaakt productcategorie.

Even een voorbeeldje van hoe die class zou integreren in mijn 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
18
19
20
21
22
23
24
25
26
27
28
29
<?php
class Controller_Producten extends Controller_MainTemplate{
    private $view;
    private $model;
    private $categorie;

    public function action_index(){    
        $this->view = new View('producten/categorie');
        $this->model = new Model_Producten();
        $this->categorie = new Product_Categorie();
        //inhoud van de home view
        $this->view->title = 'Test';
        $this->view->content = 'test producten pagina';

        //categorien --> hier gaat het dus om
        $categorien = $this->model->getCategories();
        $drawcategorien = array();
        foreach($categorien as $cat){
            $drawcategorien[] = $this->Categorie->getCategorie($cat['id']));
        }

        $this->view->categorien = $drawcategorien;

        //set title
        $this->template->title = 'Home';
        //render Template met view
        $this->template->content = $this->view;        
    }
}

?>


Nu is mijn vraag of dit nu de juiste werkwijze is of dat ik de bal totaal mis sla.
Gewijzigd op 01/01/1970 01:00:00 door Mr.Moe
 
PHP hulp

PHP hulp

25/04/2024 03:42:28
 
Yearupie Achternaamloos

Yearupie Achternaamloos

05/01/2010 22:34:00
Quote Anchor link
Ik weet het niet zeker of het goed is,
maar als ik dit zou maken zou ik dit deel niet in een class zetten.
Vooral dit deel zou ik er niet in hebben gezet:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
        $this
->view = new View('producten/categorie');
        $this->model = new Model_Producten();
        $this->categorie = new Product_Categorie();
        //inhoud van de home view
        $this->view->title = 'Test';
        $this->view->content = 'test producten pagina';
?>


Maar je kan beter wachten tot een reactie van iemand die hier meer verstand van heeft, ik ben zelf ook een beginner.
 
Jelmer -

Jelmer -

05/01/2010 23:22:00
Quote Anchor link
Ik snap deze regel niet helemaal:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
foreach($categorien as $cat){
    $this->Categorie->getCategorie($cat['id']));
?>

Waarom geeft Model_Producten::getCategories() niet direct een array met instanties van Product_Categorie-instanties terug? Dat lijkt mijn mooier dan slechts nummertjes teruggeven.

En je hebt een apart model voor de producten (Model_Producten), kan je dan ook niet zoeentje maken voor categorieën? Beiden zijn toch ongeveer even belangrijk? En het is een beetje vreemd om het model dat de producten beheert naar alle beschikbare categorieën te vragen, al zou ik me daar nog wel in kunnen vinden.
 
Mr.Moe

Mr.Moe

06/01/2010 14:24:00
Quote Anchor link
Jelmer schreef op 05.01.2010 23:22:
... Beiden zijn toch ongeveer even belangrijk? En het is een beetje vreemd om het model dat de producten beheert naar alle beschikbare categorieën te vragen, al zou ik me daar nog wel in kunnen vinden.


Zoals ik al vermelde ben ik namelijk bijna verplicht om dit te doen als ik deze url wil: www.example.com/producten.
Dat apart model kan ik volgen en dat was eigenlijk ook de bedoeling om dit nog te doen.

Jelmer schreef op 05.01.2010 23:22:
Waarom geeft Model_Producten::getCategories() niet direct een array met instanties van Product_Categorie-instanties terug? Dat lijkt mijn mooier dan slechts nummertjes teruggeven.


Je bedoelt hier dat ik deze eigenlijk gewoon uit mijn tabel moet halen en verder niets mee doen? Dan ben je toch helemaal niet object georienteerd bezig, of wel? Of moet ik vanuit die methode die objecten aanmaken, die in een array steken en deze terug geven?
 
Jelmer -

Jelmer -

06/01/2010 21:10:00
Quote Anchor link
Ik hoop niet dat je urls, of je controllers eisen hoe jij je model moet opbouwen. Je model staat echt helemaal los van dat gebeuren. Je model is de daadwerkelijke applicatie. Controllers, routers, al die fratsen eromheen zijn slechts noodzakelijk om je model toegankelijk te maken als website.

Ik bedoelde inderdaad dat je in getCategories al direct objecten teruggeeft. Want dat is juist wel object georiënteerd programmeren. Je werkt dan immers daadwerkelijk alleen nog met objecten. Niet meer met nummertjes die slechts verwijzen naar objecten.
 
Mr.Moe

Mr.Moe

06/01/2010 21:56:00
Quote Anchor link
@Jelmer: bedankt! Dit was wat ik nodig had.

Ik hou jullie op de hoogte over het verder verloop. Ik weet wel niet dat het iets voor in het kort gaat zijn, want ik zit met de examens in het vooruitzicht.
 
Mr.Moe

Mr.Moe

11/01/2010 18:11:00
Quote Anchor link
Hier is mijn volgende vraag: Is het eigenlijk verplicht om steeds alle eigenschappen van een parent class in te vullen? of is dit niet direct nodig, want momenteel heb vul ik maar 1 eigenschap in en dat is de id van het parentobject.
Gewijzigd op 01/01/1970 01:00:00 door Mr.Moe
 
Jelmer -

Jelmer -

11/01/2010 19:25:00
Quote Anchor link
Meestal heb je al de properties van je parent-class nodig, en meestal zorgen de methods van de parent-class daar grotendeels al voor. Heb je een voorbeeld van jouw probleem?
 
Mr.Moe

Mr.Moe

11/01/2010 19:37:00
Quote Anchor link
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
36
37
38
39
40
41
42
43
44
45
46
<?php
//categorie
class ProductCategorie{
    protected $catId;
    protected $catName;
    protected $catDescription;

    public function __construct($id, $name, $description){
        $this->catId = $id;
        $this->catName = $name;
        $this->catDescription = $description;
    }

    public function getCatId(){
        return $this->catId;
    }

    public function getCatName(){
        return $this->catName;
    }

    public function getCatDescription(){
        return $this->catDescription;
    }
}


//subcategorie
class ProductSubcategorie extends ProductCategorie{
    protected $subCatId;
    protected $subCatName;
    protected $subCatDescription;

    public function __construct($id, $name, $description, $catId = 0){
        $this->catId = $catId;
        $this->subCatId = $id;
        $this->subCatName = $name;
        $this->SubCatDescription = $description;
    }

    public function getSubCatId(){
        return $this->subCatId;
    }

    public function getSubCatName(){
        return $this->subCatName;
    }

    public function getSubCatDescription(){
        return $this->subCatDescription;
    }
}

?>


Momenteel geef ik enkel de id van de hoofdcategorie mee door wanneer ik een subcategorie object maak.
 
Jelmer -

Jelmer -

11/01/2010 20:22:00
Quote Anchor link
Als een subcategorie gewoon een categorie is met wat extra's, dan hoef je er toch niet een nieuwe terminologie voor te verzinnen?

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
36
37
38
39
40
41
<?php
//categorie
class ProductCategory
{
    protected $catId;
    protected $catName;
    protected $catDescription;

    public function __construct($id, $name, $description){
        $this->catId = $id;
        $this->catName = $name;
        $this->catDescription = $description;
    }

    public function getCatId(){
        return $this->catId;
    }

    public function getCatName(){
        return $this->catName;
    }

    public function getCatDescription(){
        return $this->catDescription;
    }
}


class ProductSubCategory extends ProductCategory
{
    protected $parentCategoryId;
    
    public function __construct($parentCategoryId, $id, $name, $description)
    {

        $this->parentCategoryId = $parentCategoryId;
        
        parent::__construct($id, $name, $description);
    }

    
    public function getParentCategoryId()
    {

        return $this->parentCategoryId;
    }
}

?>
Gewijzigd op 01/01/1970 01:00:00 door Jelmer -
 
Mr.Moe

Mr.Moe

11/01/2010 23:18:00
Quote Anchor link
@Jelmer: Had er zo nog niet bij stil gestaan, maar je hebt gelijk. Merci
 
Mr.Moe

Mr.Moe

13/01/2010 16:25:00
Quote Anchor link
@Jelmer: Als ik hier nu nog een class product heb, moet ik deze dan ook extenden met de class productsubcategory of gaat dit geen meerwaarde hebben?
 
Joren de Wit

Joren de Wit

13/01/2010 16:41:00
Quote Anchor link
Mr.Moe schreef op 13.01.2010 16:25:
@Jelmer: Als ik hier nu nog een class product heb, moet ik deze dan ook extenden met de class productsubcategory of gaat dit geen meerwaarde hebben?
Vraag je af of een 'productsubcategory' altijd een 'product' is en of je dus wel op die manier mag extenden. Dan blijkt al vrij snel dat je dat nooit kunt doen!

Een categorie is een eigenschap van een product, net zoals een subcategorie dat zou zijn. Extenden is hier niet mogelijk.
 
Hipska BE

Hipska BE

13/01/2010 16:49:00
Quote Anchor link
Een product is niet een soort productcategorie.
Een productcategorie is wel een soort categorie

Dus een product hoort niet een productcategorie te extenden.
 
Mr.Moe

Mr.Moe

13/01/2010 16:54:00
Quote Anchor link
Ik had al zo een vermoeden, wou het gewoon even navragen. Alvast bedankt.
 



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.