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...

Design-Pattern: Adapter

Ich habe im Rahmen unseres Team-Meetings ein paar Kurzpräsentationen geahlten.
Die bekommt ihr jetzt auch. Halt ohne Tonspur. 😉

Wir fangen mal mit dem Adapter an….

Der Adapter (englisch Adapter, Wrapper) ist ein Entwurfsmuster aus dem Bereich der Softwareentwicklung und gehört zu der Kategorie der Strukturmuster (Structural Patterns). Das Muster dient zur Übersetzung einer Schnittstelle in eine andere. Dadurch wird die Kommunikation von Klassen mit zueinander inkompatiblen Schnittstellen ermöglicht. Es ist ein Entwurfsmuster der sogenannten GoF-Muster (Gang of Four, siehe Viererbande).

Alt:
[code]
class AddressDisplay
{
private $addressType;
private $addressText;

public function setAddressType($addressType)
{
$this->addressType = $addressType;
}

public function getAddressType()
{
return $this->addressType;
}

public function setAddressText($addressText)
{
$this->addressText = $addressText;
}

public function getAddressText()
{
return $this->addressText;
}
}

class EmailAddress
{
private $emailAddress;

public function getEmailAddress()
{
return $this->emailAddress;
}

public function setEmailAddress($address)
{
$this->emailAddress = $address;
}
}

$emailAddress = new EmailAddress();
/* Populate the EmailAddress object */
$address = new AddressDisplay();
/* Here’s the assignment code, where I’m assigning values
from one object to another… */
$address->setAddressType(„email“);
$address->setAddressText($emailAddress->getEmailAddress());
[/code]

Neu:
[code]
class EmailAddressDisplayAdapter extends AddressDisplay
{
public function __construct($emailAddr)
{
$this->setAddressType(„email“);
$this->setAddressText($emailAddr->getEmailAddress());
}
}

$email = new EmailAddress();
$email->setEmailAddress(„user@example.com“);

$address = new EmailAddressDisplayAdapter($email);

echo($address->getAddressType() . “
[/code]

GD Star Rating
loading...