Birden fazla veri Eşleştiricisi'ni ihtiyacı Alan Nesnesi

0 Cevap php

Ben farklı bölgelerine uygulama Domain Modelleri yeniden nasıl anlamaya çalışıyorum ve Veri Mapper desen ileriye yol olduğunu bir his var. Aşağıdaki örnek, doğrudan Mapper yöntemleri erişim yöntemleri vardır.

class Groups
{
    protected $_groups = array();

    public function addGroup($name)
    {
        $this->_groups[] = $name;
    }

    public function doSomethingGroupy($cakes)
    {
        // get all the groups that have cake
        return $cakeyGroups;
    }
}

... Ve Grupları sınıf yöntemlerini uygun bir mapper.

class GroupMapper
{
    public function find($id, Groups $group)
    {
         // Mappy type things, maybe some sql
    }

    public function fetchByNeediness($cuddles, Groups $group)
    {
         // More mappy type things
    }

    public function save(Groups $groups)
    {
         //  Saves
    }
}

Bazen sonra ben aynı Grupları Modelleri kullanmak ancak farklı sorguları kullanarak grupları doldurmak istedim ancak ben farklı bir eşleştiricisini kullanmak istiyorsunuz.

class AngryGroupMapper
{
    public function find($id, Groups $group)
    {
        // Something similar but with other tables and joins
    }

    public function fetchByRage($anger, Groups $group)
    {
        // Something new but only needed here
    }

    public function isEditable(Groups $groups)
    {
         // Do some querying
         return $bool;
    {
}

Yağ Modeli, bu yüzden Modeli Eşleştiricisi'ni (tabiri caizse) Harita için başka bir model olurdu - Şimdi ben amacı Skinny Kontrol olduğunu biliyor musun?

class FatModelRepository
{
    public function getHappyGroups()
    {
        $mapper = new GroupMapper();
        return $mapper->fetchByNeediness('Puffy Shoes', new Groups());
    }

    public function getSadGroups()
    {
        $mapper = new AngryGroupMapper();
        return $mapper->fetchByRage('Aghh!', new Groups());
    {

    public function save(Groups $groups)
    {
        $mapper = new GroupMapper();
        return $mapper->save($groups);
    {
}

0 Cevap