Zitat von dr.e.
Beitrag anzeigen
Ankündigung
Einklappen
Keine Ankündigung bisher.
Frage zum Factory Design Pattern
Einklappen
Neue Werbung 2019
Einklappen
X
-
-
Ich benutze dafür ein Verfahren dieser Art:
PHP-Code:$oProductFactory = new ProductFactory;
$oProductFactory->registerFactory (new ProductFactory_Navi);
$oProductFactory->registerFactory (new ProductFactory_Handy);
$aProducts = $oProductFactory->create ($oDatabase , $whereClause , $orWhatever);
class ProductFactory
{
...
registerFactory (ConcreteProductFactory $oProductFactory)
{
$keys = $oProductFactory->canHandle ();
foreach ((array) $keys as $key)
{
$this->aSubFactories[$key] = $oProductFactory;
}
}
}
Einen Kommentar schreiben:
-
Wie könnte ich hier am besten vorgehen?
Einen Kommentar schreiben:
-
Hallo,
was bekommst du denn an Daten für das Suchergebnis? Pro Treffer musst du doch irgendwie feststellen, welchen Typ der Treffer hat.
PHP-Code:<?php
$select = "
SELECT *, 'Handy' AS deviceType FROM handys WHERE description LIKE '%$suche%'
UNION
SELECT *, 'Navi' AS deviceType FROM navis WHERE title LIKE '%$suche%'";
// ..
$products = array();
while ($row = mysql_fetch_assoc($result)) {
$deviceType = $row["deviceType"];
$product = ProductFactory::get($deviceType);
$product->fromArray($row);
$products[] = $product;
}
?>
PHP-Code:<?php
abstract class Product {
public static function factory($deviceType) {
$class = __CLASS__ . "_" . $deviceType;
if (class_exists($class)) {
return new $class();
}
throw new InvalidArgumentException("invalid device type");
}
public function fromArray(array $data) {
foreach ($data as $key => $value) {
if (property_exists($this, $key)) {
$this->{$key} = $value;
}
}
}
}
class Product_Handy extends Product {
public $description;
}
class Product_Navi extends Product {
public $title;
}
?>
Wäre zumindest mein Ansatz.
Einen Kommentar schreiben:
-
Also z.B. über eine DB-Abfrage aus den Suchergebnissen den Typ ermitteln und dann jeweils die Klasse aufrufen?
Was wäre denn ein bessere Design Konzept? Ich habe noch nicht so viel mit Design Pattern gemacht, daher bin ich mir nicht so sicher. Aber dachte das es für diesen Anwendungsfall ok ist.
Einen Kommentar schreiben:
-
Ein Gast antworteteWenn du vorher prüfst welche Geräte alles auf der Suchergebnisse Seite angezeigt werden sollen -> Danach die entsprechenden Klassen nachladen!?
Ansonsten bist du dir sicher das du das korrekte Design Konzept rausgesucht hast?
Einen Kommentar schreiben:
Einen Kommentar schreiben: