Datamapper
Wat is in de volgende situatie de mooiste manier om associaties (1-veel, veel-1, veel-veel) te regelen met een niet-generieke datamapper?
Iemand een suggestie? En dan het liefst niet alles eager-loading...
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
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
<?php
// Plain-old-php-object: geen DB interactie oid
class User
{
// Var, 1-1, 1-meer, meer-meer
protected $email, $address, $group, $permissions;
public function set/getEmail($email);
public function setAddress(Address $address);
public function getAddress();
public function setGroup(Group $group);
public function getGroup();
// Even de ACL in de User
public function setPermissions(array $permissions);
public function addPermission(Permission $permission);
public function isAllowed($action);
}
class UserMapper extends Mapper
{
public function findById($id);
public function save(User $user);
public function insert(User $user);
}
?>
// Plain-old-php-object: geen DB interactie oid
class User
{
// Var, 1-1, 1-meer, meer-meer
protected $email, $address, $group, $permissions;
public function set/getEmail($email);
public function setAddress(Address $address);
public function getAddress();
public function setGroup(Group $group);
public function getGroup();
// Even de ACL in de User
public function setPermissions(array $permissions);
public function addPermission(Permission $permission);
public function isAllowed($action);
}
class UserMapper extends Mapper
{
public function findById($id);
public function save(User $user);
public function insert(User $user);
}
?>
Iemand een suggestie? En dan het liefst niet alles eager-loading...
Gewijzigd op 17/01/2011 20:03:41 door Pim -
Gesponsorde koppelingen:
bump
Gewijzigd op 19/01/2011 11:19:08 door Pim -
Tja dat is een goede. Zou zelf één twee drie ook niet de beste oplossing weten.
Zodra jij een mooie oplossing hebt gevonden zou je die dan willen plaatsen?
Zodra jij een mooie oplossing hebt gevonden zou je die dan willen plaatsen?
Is goed hoor.
Ik kan het alleen echt nergens op internet vinden en hier weet volgens mij ook niemand er iets zinnigs over te melden.
Ik kan het alleen echt nergens op internet vinden en hier weet volgens mij ook niemand er iets zinnigs over te melden.
Kijk eens naar http://stensi.com/datamapper/. Niet dat je dat moet gebruiken, maar hun manier voldoet wel aan jouw voorwaarden :).
class User extends DataMapper {
is een active record... Leuke naamgeving.
Verder ben ik meer op zoek naar een niet-generiek systeem met slechts een paar klassen. Anders gebruik ik wel Doctrine2 oid.
is een active record... Leuke naamgeving.
Verder ben ik meer op zoek naar een niet-generiek systeem met slechts een paar klassen. Anders gebruik ik wel Doctrine2 oid.
Met slechts een paar klassen dan zou je eigenlijk een generiek systeem moeten hebben toch? Als ie niet generiek is moet je overal klassen voor maken. En de Datamapper die ik aandraag is geen Active Record, het is een datamapper waarin je active record style data kan selecteren.
Maar het leuke van een DataMapper is toch dat je domain objects (User) niets met de opslag te maken hebben. Als dat wel zo is, is het toch gewoon een active record? Ik zie ook nergens in de documentatie een object buiten het domain object waarmee je voor de opslag communiceert.
En met niet-generiek bedoel ik iets als:
Dit is nog allemaal makkelijk. Maar waar ik benieuwd naar was, is hoe je in dit model associaties integreert.
Een niet-generiek systeem maakt het geheel zo veel eenvoudiger.
En met niet-generiek bedoel ik iets als:
Code (php)
Dit is nog allemaal makkelijk. Maar waar ik benieuwd naar was, is hoe je in dit model associaties integreert.
Een niet-generiek systeem maakt het geheel zo veel eenvoudiger.
Als je het niet generiek wil dan kan je toch iets als dit doen?
Er van uit gaande dat een User meerdere Websites heeft. Wil je het lazy loading houden dan kan je in getWebsites() van User een oproep doen om de websites van de User in kwestie te vinden. Moet de User de Mapper wel kennen.
PS. (Edit) Ik ga voor een dagje of wat offline :).
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Er van uit gaande dat een User meerdere Websites heeft. Wil je het lazy loading houden dan kan je in getWebsites() van User een oproep doen om de websites van de User in kwestie te vinden. Moet de User de Mapper wel kennen.
PS. (Edit) Ik ga voor een dagje of wat offline :).
Gewijzigd op 21/01/2011 21:39:06 door The Force
En dat is dus de vraag: hoe associaties te regelen zonder het domain object kennis te laten hebben van de persistence. Verder moet $user->setWebsties() een array van objecten (of proxies) krijgen, niet van IDs.
Of vraag ik nu het onmogelijke?
Of vraag ik nu het onmogelijke?
Ik denk het wel Pim, ik kan er i.i.g niets op verzinnen. Zou overigens wel cool zijn. Ik zal het eens vragen op mijn werk maandag.
Gewijzigd op 29/01/2011 14:49:48 door Niels Kieviet



