php.de

Zurück   php.de > Webentwicklung > Software-Design

Software-Design Diskussionen auf Profi-Niveau: PHP Lösungen auf konzeptioneller Ebene

Antwort
 
LinkBack Themen-Optionen Bewertung: Bewertung: 1 Stimmen, 5,00 durchschnittlich.
Alt 01.06.2011, 12:38  
Benutzer
 
Registriert seit: 29.05.2011
Beiträge: 58
PHP-Kenntnisse:
Anfänger
axelf befindet sich auf einem aufstrebenden Ast
Standard Frage zum Factory Design Pattern

Hi,

für verschiedene Produkte gibt es bei mir je eine Klasse für ein Produkt.
In der Factory hole ich mir je nach Produkttyp die entsprechende Klasse

PHP-Code:
$navi ProductFactory::get('navi'// Navigationsgeräte
oder
$handy 
ProductFactory::get('handy'// Handys 
Auf diesen Seiten weiß ich auch, welchen Typ ich benötige.

Auf der Suchergebnisseite sollen aber Produkte beider Typen angezeigt werden und ich weiß ja vorher nicht ob es ein Handy oder Navi ist.
Es sollen als kleine Beschreibung dann jeweils spezifische Daten zu jedem Produkttyp ausgegeben werden. Wie könnte ich hier am besten vorgehen?
axelf ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 01.06.2011, 12:45  
ChrisA
Gast
 
Beiträge: n/a
Standard

Wenn 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?
  Mit Zitat antworten
Alt 01.06.2011, 12:57  
Benutzer
 
Registriert seit: 29.05.2011
Beiträge: 58
PHP-Kenntnisse:
Anfänger
axelf befindet sich auf einem aufstrebenden Ast
Standard

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.
axelf ist offline   Mit Zitat antworten
Alt 01.06.2011, 13:07  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.269
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

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;
}
?>
Wenn du z.B. eine Handy- und eine Navi-Klasse hast, könnten beide von einer gemeinsamen Product-Klasse erben, die die Factory zur Verfügung stellt.

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;
}
?>
Der Einfachheit halber ohne Namensmapping (SQL -> PHP-Property) und ohne eigene Setter/Getter.

Wäre zumindest mein Ansatz.
__________________
"Nuschel ich?" - "Was?"
Chriz ist offline   Mit Zitat antworten
Alt 01.06.2011, 18:25  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Zitat:
Wie könnte ich hier am besten vorgehen?
Warum unterscheiden?
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline   Mit Zitat antworten
Alt 01.06.2011, 18:42  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.994
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

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;
      }
    }
  } 
key repräsentiert dann bspw. ein Feld aus der Datenbank-Result-Menge, über das eine spezifische Fabrik angefordert werden kann.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 01.06.2011, 20:51  
Benutzer
 
Registriert seit: 29.05.2011
Beiträge: 58
PHP-Kenntnisse:
Anfänger
axelf befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von dr.e. Beitrag anzeigen
Warum unterscheiden?
Öhm, warum sollte ich nicht unterscheiden? Ich möchte ja von den beiden Klassen spezielle Daten zurückgeliefert bekommen.
axelf ist offline   Mit Zitat antworten
Alt 01.06.2011, 21:03  
Benutzer
 
Registriert seit: 29.05.2011
Beiträge: 58
PHP-Kenntnisse:
Anfänger
axelf befindet sich auf einem aufstrebenden Ast
Standard

Hi Chriz,

Zitat:
Zitat von Chriz Beitrag anzeigen
Hallo,

was bekommst du denn an Daten für das Suchergebnis? Pro Treffer musst du doch irgendwie feststellen, welchen Typ der Treffer hat.
Die Daten zum Suchergebnis bekomme ich über eine Abfrage. Hatte es nicht so gut gelöst wie in deinem Beispiel, aber danke für den hilfreichen Beitrag. Das hat mir sehr weitergeholfen. Die abstrakte Klasse Produkt hatte ich auch angelegt und Handy bzw. Navi werden dann abgeleitet.

Ich hatte noch eine Factory-Klasse angelegt, aber finde deine Möglichkeit auch gut. Nochmals viele Dank. Wieder was dazugelernt
axelf ist offline   Mit Zitat antworten
Alt 01.06.2011, 21:16  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.269
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

Wobei das mit dem UNION so nicht ganz klappt, die Spaltentypen dürfen sich nicht unterscheiden und auch die Anzahl muss dieselbe sein.
__________________
"Nuschel ich?" - "Was?"
Chriz ist offline   Mit Zitat antworten
Alt 01.06.2011, 21:27  
Benutzer
 
Registriert seit: 29.05.2011
Beiträge: 58
PHP-Kenntnisse:
Anfänger
axelf befindet sich auf einem aufstrebenden Ast
Standard

Ich habe mir eine Tabelle gemacht, wo so allgemeine Daten drinstehen und dann speziell eine Tabelle für die einzelnen Produkte (Fremdschlüssel). In der allgemeinen Tabelle gibt es die Spalte typ, und diese wird ausgelesen
axelf ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Eine Frage zum guten Code-Layout SilentSight JavaScript, Ajax und mehr 3 14.07.2010 09:18
[Erledigt] Design von Klassen für Datenbankabfragen Sirke Software-Design 10 17.06.2010 12:40
[Erledigt] Frage zu JOIN Befehl und dem Auslesen desselben apo PHP Tipps 2010 11 13.06.2010 19:32
Datenbank Design (Idee / Frage) suche007 Datenbanken 1 30.07.2009 13:38
Design Frage - Buchungskalender -Dirk- PHP-Fortgeschrittene 4 28.03.2009 23:20
URL Frage Eclipse16V PHP Tipps 2009 8 23.02.2009 17:02
Hallo eine Frage in sachen Forensysteme spikytux HTML, Usability und Barrierefreiheit 11 03.01.2009 15:06
Dringende Frage odde PHP Tipps 2008 5 28.10.2008 19:03
Frage zu LDAP Frage (Active Directory) FRAD PHP Tipps 2008 0 01.10.2008 16:11
Design und Code Trennen TeazY PHP Tipps 2008 29 21.05.2008 12:08
Frage zu meinem DB Design Schandi Datenbanken 7 25.07.2007 11:26
Mit Sessionen das Design wählen lassen. PHP Tipps 2004-2 8 28.12.2004 08:30
[Erledigt] Frage zur Funkrionen? PHP Tipps 2004-2 10 01.12.2004 09:42
[Erledigt] Frage! PHP Tipps 2004 4 27.07.2004 11:25

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php factory, php design pattern, php factory design pattern, design pattern factory, pattern klassen nachladen, design pattern php, factory design pattern tutorial deutsch php, factory pattern, design patterns php, php designs pattern, php design patterns

Alle Zeitangaben in WEZ +2. Es ist jetzt 01:35 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum