Marian,
A static identity map is the way to go. Page 291 of Php objects, patterns,
and 
practice<http://books.google.com/books?id=qVLjFk_4zVYC&lpg=PA487&dq=ebook%20php%205%20objects%20patterns%20practice&pg=PA291#v=onepage&q=&f=false>by
Matt Zandstra demonstrates how to build a simple but effective
identity
map. Is there a reason you don't want to go with a static identity map?

--
Hector


On Sun, Aug 30, 2009 at 10:32 AM, Marian Meres <[email protected]>wrote:

> Hello Benjamin,
>
> thank you... but either I can't follow, or I must not have described
> properly the question. Because I do not understand how the factory could
> help you to share the map, unless you do not share the factory then...
>
> Example:
>
> class MapperFactory
> {
>     protected $_identityMap;
>    public function create($name)
>     {
>        $mapperClass = $this->_somePrefix . $name;
>         $mapper = new $mapperClass();
>        $mapper->setIdentityMap($this->getIdentityMap($name));
>         return $mapper;
>    }
> }
>
> // somewhere in log on (user service)
> $mapperFactory = new MapperFactory();
> $userMapper = $mapperFactory->create('user');
> $user = $userMapper->find(1); // find also saves the user identity.
>
> // somewhere in article model
> class Article
> {
>    // lazy load author
>     public function getAuthor()
>    {
>         if (null == $this->_author) {
>            $mapperFactory = new MapperFactory();
>             $userMapper = $mapperFactory->create('user');
>            $this->_author = $userMapper->find($this->_authorId);
>         }
>        return $this->_author;
>     }
> }
>
> My question is, how to design the whole thing so that the later model can
> reuse the identity set in the log on service (if applicable), while trying
> to avoid implementing static something somewhere. My understanding is, that
> without introducing new "domain superlayer" this could hardly be done, but
> is it worth it then? Why just not live with the static, with proper
> resetings (I know the test issues).
>
> Zend_Application is nice example where it works well (the good, non static
> container), but is this approach applicable to pure domain classes, where
> there is no front controller to pull the container from?
>
> Thank you again.
>
> And, BTW, respect for the Zend_Entity work! Very inspiring.
>
> Regards,
> M.
>
>
>
> On Sun, Aug 30, 2009 at 5:17 PM, Benjamin Eberlei<[email protected]>
> wrote:
> > hello,
> >
> > If you dont instantiate your mappers through a factory you probably will
> have
> > lots of work to do if you dont make access to the identity map global via
> a
> > static method.
> >
> > greetings,
> > Benjamin
> >
> > On Sunday 30 August 2009 04:58:32 pm Marian Meres wrote:
> >> Hi All,
> >>
> >> I have many domain models where each has its own data mapper. These
> >> mappers are spread across many places as a) services use mappers, b)
> >> mapper x uses mapper y, c) and even models use mappers (only in the
> >> case of lazy loading).
> >>
> >> I want mappers to utilize the identity map pattern (which is itself
> >> pretty straightforward). I guess the whole pattern makes more sense
> >> when used as a shared map across the mappers rather than for each to
> >> have its own.
> >>
> >> Since the mappers usage (and instantiation) is wide spread (at least
> >> in my case), the only solution I could think of is always a sort of a
> >> static one (either through static members, or static "managers", or
> >> even some injectable containers which default to static
> >> Zend_Registry).
> >>
> >> What would you suggest, other than the static way?
> >>
> >> Thank you in advance.
> >>
> >> M.
> >
> >
> > --
> > Benjamin Eberlei
> > http://www.beberlei.de
> >
>
>

Reply via email to