DI - Service containter

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Top Low-Code Developer Gezocht!

Bedrijfsomschrijving Unieke Kansen, Uitstekende Arbeidsvoorwaarden & Inspirerend Team Wij zijn een toonaangevende, internationale organisatie die de toekomst van technologie vormgeeft door het creëren van innovatieve en baanbrekende oplossingen. Ons succes is gebaseerd op een hecht en gepassioneerd team van professionals die altijd streven naar het overtreffen van verwachtingen. Als jij deel wilt uitmaken van een dynamische, vooruitstrevende en inspirerende werkomgeving, dan is dit de perfecte kans voor jou! Functieomschrijving Als Low-Code Developer ben je een cruciaal onderdeel van ons team. Je werkt samen met collega's uit verschillende disciplines om geavanceerde applicaties te ontwikkelen en te optimaliseren met behulp van Low-code

Bekijk vacature »

Pagina: « vorige 1 2

Jasper DS

Jasper DS

09/01/2013 17:42:15
Quote Anchor link
Hmm, dan moet ik die mapper weer gaan aanpassen?

userMapper.php
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
    private $storage;

    public function __construct( $storage)
    {

        $this->setStorage($storage);
    }


    protected function setStorage( $storage)
    {

        $this->storage = $storage;
    }


    protected function getStorage()
    {

        return $this->storage;
    }
    
?>


Elke instantie van userMapper kan toch maar één storage hebben? Wat mij wel logisch lijkt!

of pas ik het zo aan?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
$container
->set('user.mapper.temporaryStorage', function($c)
    {

        $class = $c->get('user.mapper.databaseStorage');
        $class->setStorage($c->get('storage.session'));
            return $class;
    });

?>
 
PHP hulp

PHP hulp

21/11/2024 15:45:24
 
Wouter J

Wouter J

09/01/2013 18:10:30
Quote Anchor link
Ja, sorry. Dat komt omdat zowel ik als jij niet van te voren de hele applicatie hebben uitgetekend, maar gewoon domweg zijn begonnen met scripten. Hier zie je dus waarom het zeer belangrijk is om eerst met een ouderwets a4'tje en potlood je applicatie uit te tekenen, dan doe je het in 1 keer goed.

Maar goed, wat ik dus zou doen is in je UserMapper 2 storages laten meegeven. Eentje om tijdelijke (temporary) dingen in op te slaan, zoals een SessionStorage, en eentje om vaste dingen (db) in op te slaan, zoals een DbStorage.
 
Jasper DS

Jasper DS

09/01/2013 18:34:34
Quote Anchor link
Dus eigenlijk zou de usermapper / elke mapper een oneindig aantal storages moeten kunnen hebben? Als je wil opslaan in een db, in een xml en in een sessie. Je zou 3x een nieuwe usermapper kunnen maken maar dat is tegen de OOP regels? Dus eigenlijk een array met alle storages en dan per functie meegeven welke storage je gaat gebruiken? Een extra paramater bij bv. de find() functie?
 
Wouter J

Wouter J

09/01/2013 18:47:04
Quote Anchor link
Nee, de usermapper gebruikt 2 soorten storage. Hij moet een database storage instance (wat dit is, een xml/yml/csv/...-bestand, PDO database, ect. maakt niks uit) om gebruikers voor goed op te slaan en een tijdelijke storage instance (sessie, cookie, tijdelijk bestandje, ect.) om te onthouden welke gebruiker ingelogd is.
 
Jasper DS

Jasper DS

09/01/2013 18:53:33
Quote Anchor link
Moest ik dan bijvoorbeeld een user willen ophalen uit de database en in een xml bestand willen steken gebruik ik twee usermappers?

-----------------------------

Indien we 2 storages hebben een temp en een "vaste" dan moet ik eigenlijk 2 find() functies hebben? find() en findTemp()?

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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
<?php
class UserMapper
{
    private $storage;
    private $tempStorage;

    public function __construct($storageValue,$storage)
    {

        // true = storage, false = temporary

        if($storage === true)
        {

            $this->setStorage($storageValue);
        }

        else
        {
            $this->setTempStorage($storageValue);
        }    
    }


    protected function setTempStorage($storage)
    {

        $this->storage = $storage;
    }


    protected function getStorage()
    {

        return $this->storage;
    }
    

    protected function setTempStorage($storage)
    {

        $this->tempStorage = $storage;
    }


    protected function getTempStorage()
    {

        return $this->tempStorage;
    }




   /**
     * populate array into a User object
     *
     * @author     JasperDS <http://jasperdesmet.be>
     * @param     array $data
     * @return     User
     */

    public function populate($data)
    {

        if(isset($data['name']))
        {

            $user = new User($data['name']);
        }

        else
        {
            $user = 'Not found';
        }
    

        if(isset($data['id']))
        {

            $user->setId($data['id']);
        }


        if(isset($data['email']))
        {

            $user->setEmail($data['email']);
        }


        if(isset($data['password']))
        {

            $user->setPassword($data['password']);
        }
    

        return $user;
    }


    /**
     * Find a User in the storage
     *
     * @author Jasper De Smet <http://www.jasperdesmet.be>
     * @version 1.0
     *
     * @param User $user
     * @param array $criteria the requested criteria (not required)
     *
     * @return bool
     */

    public function find(array $fields, $criteria = NULL)
    {

        $results = array();
        $results = $this->getStorage()->find('users', $fields, $criteria);


        $users = array();
        foreach($results as $result)
        {

            $users[] = $this->populate($result);
        }

        
        return $users;
    }


    /**
     * Find a User in the tempstorage
     *
     * @author Jasper De Smet <http://www.jasperdesmet.be>
     * @version 1.0
     *
     * @param User $user
     * @param array $criteria the requested criteria (not required)
     *
     * @return bool
     */

    public function findTemp(array $fields, $criteria = NULL)
    {

        $results = array();
        $results = $this->getTempStorage()->find('users', $fields, $criteria);


        $users = array();
        foreach($results as $result)
        {

            $users[] = $this->populate($result);
        }

        
        return $users;
    }
    
    ....


?>
Gewijzigd op 09/01/2013 22:04:36 door Jasper DS
 
Jasper DS

Jasper DS

11/01/2013 10:58:54
Quote Anchor link
Ik geraak er nog steeds niet uit eigenlijk..
Gewijzigd op 11/01/2013 10:59:19 door Jasper DS
 
Appel Taart

Appel Taart

11/01/2013 18:58:46
Quote Anchor link
Ik zou het als volgt doen.
De userMapper heeft als enige verantwoordelijkheid om een User-object naar een andere laag in je applicatie te 'verschuiven'. In je andere objecten moet je dus zelf niet bezig zijn met de vraag hoe de userMapper dit moet doen of waar hij bepaalde objecten moet vinden. Dat is nou juist de verantwoordelijkheid van de userMapper.

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

class UserMapper {

    public function find(array $params) {
        // de usermapper moet zelf bedenken waar hij dit object kan vinden
        // hij kan bijvoorbeeld eerst in de tempStorage kijken en als daar
        // niets te vinden is in de normale storage

    }

    public function save(User $user) {
        // idem dito, laat de userMapper bedenken waar het object hoort te worden opgeslagen
    }
}

?>


Quote:
Moest ik dan bijvoorbeeld een user willen ophalen uit de database en in een xml bestand willen steken gebruik ik twee usermappers?

Deze vraag vind ik een beetje vreem gesteld, kan je iets precieser uitleggen wat de bedoeling hiervan is? Het exporteren van een aantal objecten neem ik aan?

Dan zou je aan de userMapper een functie export kunnen toevoegen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
class UserMapper {
    public function exportUser(User $user, UserStorage $storage) {}
}

?>


Nogmaals het helpt jezelf en ons ook als je iets duidelijker de specificaties kan noemen die je UserSysteem moet hebben. Het is makkelijker om een lijstje System Requirements om te zetten naar een object ontwerp dan dit stapje voor stapje te doen!
Lees ook het boek Head First Object-Oriented Analysis and Design (daar dwaalt een pdf-je van rond op het web)!

Succes!
Gewijzigd op 11/01/2013 19:00:12 door Appel Taart
 
Jasper DS

Jasper DS

15/01/2013 13:27:33
Quote Anchor link
@Appel taart, dat lijkt mij een tijdrovende klus als de Mapper eerst altijd de tempstorage moet doorlopen.

Ik ben momenteel dit topic aan het bekijken. Dat gaat over de model in een MVC framework.

De model bestaat daar uit 3 delen: Domain Object (aanwezig), mapper (aanwezig), serviceLayer (min of meer aanwezig).

In deze implementatie is het domain object oke denk ik. De mapper ga ik deels anders moeten laten functioneren en de service-container ga ik anders moeten implementeren.

Elke model moet een serviceLayer hebben want die legt de connectie tussen de controllor het domain object en de mapper.

Lijkt dat jullie ook een goede methode?
 

Pagina: « vorige 1 2



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.