Design-Pattern: Fluent Interface

2 Möglichkeiten:

1.) Ohne Grammatik
[code]
class DbQuery
{

public function select($what)
{
//…
return $this;
}

public function from($where)
{
//…
return $this;
}

public function where($attribute, $condition, $value)
{
//…
return $this;
}

public function order($attribute, $order)
{
//…
return $this;
}

public function limit($amount)
{
//…
return $this;
}

public function execute()
{
$result = …. (Object von DbResult wird erzeugt)
return $result;
}

}

$query = new DbQuery($db_connection); //$db_connection beinhaltet z.B. die Verbindung zur Datenbank. Hier unwichtig.
$result = $query->select(„*“)->from(„persons“)->where(„gender“, DbQuery::Cond_Equals, „male“)->order(„age“, DbQuery::Order_DESC)->limit(5)->execute();
[/code]

2.) Mit Grammatik => Die Reihenfolge spielt eine Rolle und liefert unterschiedlich Objekte
[code]
class DbQuery
{

public function select($what)
{
//…
return new DbQuery_Select($this);
}
}

class DbQuery_Select extends DbQuery
{

public function select($what)
{
throw new Excpetion(‚may not be called‘);
}

public function from($where)
{
// …
return new DbQuery_Table($this);
}
}

$query = new DbQuery($db_connection); //$db_connection beinhaltet z.B. die Verbindung zur Datenbank. Hier unwichtig.
$result = $query->select(„*“)->from(„persons“)->where(„gender“, DbQuery::Cond_Equals, „male“)->order(„age“, DbQuery::Order_DESC)->limit(5)->execute();
[/code]

GD Star Rating
loading...

Kommentar verfassen