Autor Zpráva
mzk
Profil *
zdravím,
mějme třeba třídu články:
class Clanky {
    protected
        $id, $nadpis, $text;

    // nějaké gettery a settery + třeba konstruktor..

    public function uloz() {}

    public function nacti() {}
}
Články se ukládají do db (id, nadpis, text, stav ..)

Jde mi o to, že třída z hlediska univerzálnosti by asi neměla obsahovat metodu ulož např:
public function uloz() {
    //..
    mysql_query("Insert into.. " . $this->nazev . "...");
    //..
}
protože když budu chtít ukládat články třeba na disk, tak budu muset přepsat vnitřek třídy, která by měla být tak nějak univerzální (obdobně u metody načti). Jak tedy správně na to?
DJ Miky
Profil
Mohl by ti pomoci článek Kam s obslužnými metodami modelu? a navazující Pět vrstev modelu.
mzk
Profil *
DJ Miky:
díky, ale narazil jsem "na problém", pokud to dobře chápu, tak:
class Clanek {
  // pro jednoduchost
    public
     $id, $nadpis, $text;
    }
  
  public function __toString() {
      return "<h3>" . $this->nadpis . "</h3>" . $this->text;
    }
}

class ClanekDBMapper {    
    public function uloz($clanek) {
        mysql_query("insert into clanky..." . $clanek->id . "...");        
      }
    
    public function nacti($id) {
        $res = mysql_query("select... where id" . $id);
        //..
        $clanek = new Clanek();
        $clanek->nadpis = $row['nadpis'];
        //..
        return $clanek;
      }
  }


class ClanekRepository {
    public function __construct($kam) {
        switch($kam) {
            case 'db': $this->repository = new ClanekDBMapper(); break;
            //...
          }
      }
    
    public function nacti($id)  {
        return $this->repository->nacti($id);
      }
  }
  
 
$repclanek = new ClanekRepository('db');
$clanek = $repclanek->nacti($id);
echo $clanek;
teď mě nenapadá vhodný příklad, ale co když udělám potomka článku, třeba že tam budu chtít evidovat počet zobrazení - tak mu udělám vlastní mapper, ale jak to bude s ClanekRepository?

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: