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 Thema bewerten
Alt 13.01.2009, 00:25  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.065
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 Datenbankkommunikation über Events

Hallo,

das Durchreichen von Datenbank-Adaptern für ActiveRecord oder die Benutzung von Singleton um die Datenbank-Instanz zu holen stört mich gerade.

Ich habe mir überlegt ob eine User-Klasse nun nicht einen Event werfen könnte um wer auch immer sich für diesen Event eingetragen hat, die Speicherung übernehmen zu lassen.

User.class.php
PHP-Code:
<?php
class User {
  
// ..
  
public function save() {
    
$event = new Event(__METHOD__$this);
    
$event Registry::get("EventDispatcher")->trigger($event);
    return 
$event->getSuccess()
  }
  
// ..
?>
events.inc.php
PHP-Code:
<?php
$eventDispatcher 
= new EventDispatcher();
$eventDispatcher->handle("User::save", new Database_Csv());
$eventDispatcher->handle("Mailbox::save", new Database_Mysql());
// ..
Registry::set("EventDispatcher"$eventDispatcher);
?>
Im Prinzip geht das ja in Richtung Inversion of Control, welches ja auch im Zusammenhang mit Dependency Injection genannt wird. Letzteres scheint mir allerdings etwas kompliziert (ja die Scheu) bzw. etwas zu überladen.

Was haltet ihr von der Event-basierten Speicherung? Im Event-Kontext könnte ich ja alle Informationen ablegen, um mehr als nur "getSuccess" als Feedback anzubieten, eben auch das Transportieren von Werten (User-Eigenschaften zu read()).

Was wäre eure Meinung dazu?

Wie ich dadrauf gekommen bin der Vollständigkeit halber:
Designfrage 2: das leidige mitschleifen von Parametern - Forum: phpforum.de
Chriz ist gerade online   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 13.01.2009, 13:10  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 34.048
PHP-Kenntnisse:
Fortgeschritten
nikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz sein
Standard

Habe ich noch nicht ganz durchdrungen. Wer speichert (die User Klasse), unn wo treten die Daten auf bzw. wie werden sie übergeben (liest die angetriggerte Funktion die dann über eine Methode aus dem Event-erzeugenden Objekt oder wie)?

[edit]
Habe jetzt auch die anderen Forenbeiträge gelesen. Was gegen Singleton und ähnliche Konstrukte spricht, kann ich noch nicht ganz nachvollziehen.
Wie wärs mit einem spezialisierten Objekt, das bspw. von Datenbankobjekt erbt (und seine Connection und Methoden nutzt) aber mit bspw. User-Objekten umgehen kann? Diesem bräuchtest Du dann nur das User-Objekt zu übergeben und 'save () zu drücken'.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--

Geändert von nikosch (13.01.2009 um 13:19 Uhr).
nikosch ist offline   Mit Zitat antworten
Alt 13.01.2009, 15:15  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.065
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

Zitat:
Zitat von nikosch Beitrag anzeigen
Habe ich noch nicht ganz durchdrungen. Wer speichert (die User Klasse), unn wo treten die Daten auf bzw. wie werden sie übergeben (liest die angetriggerte Funktion die dann über eine Methode aus dem Event-erzeugenden Objekt oder wie)?
Der EventHandler, der sich konkret für "User::save" registriert hat bekommt den Event an seine Interface-Methode handle(Event $event) übergeben. Ein Event besitzt eine $context Property, in der alles abgelegt werden kann, was den Event ausmacht, z.B. das konkrete User-Objekt.

Letztlich landet also das User-Objekt bei new Database_Csv() oder wem auch immer, der natürlich dafür ausgelegt sein muss. Im Prinzip also ein Mapper, wie du es hier auch geschrieben hast:
Zitat:
Wie wärs mit einem spezialisierten Objekt, das bspw. von Datenbankobjekt erbt (und seine Connection und Methoden nutzt) aber mit bspw. User-Objekten umgehen kann? Diesem bräuchtest Du dann nur das User-Objekt zu übergeben und 'save () zu drücken'.
Mit dem Vorteil, dass außer dem EventDispatcher niemand weiß, wer das Objekt nun gespeichert hat.
Chriz ist gerade online   Mit Zitat antworten
Alt 13.01.2009, 22:04  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.629
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:
Mit dem Vorteil, dass außer dem EventDispatcher niemand weiß, wer das Objekt nun gespeichert hat.
Und das irgendwann dermaßen intransparent wird...
__________________
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 13.01.2009, 22:57  
Erfahrener Benutzer
 
Registriert seit: 06.09.2008
Beiträge: 189
#Avedo befindet sich auf einem aufstrebenden Ast
Standard

Hallo!
Ich denke dieser Thread aus dem Adventure-PHP-Forum sollte auch für dich interessant sein. Dort geht es um eine Implementierung des DataMapper Patterns von Martin Fowler. Würde mich freuen, wenn du dich ebenfalls an der Diskussion beteiligst.
MfG, Andy
__________________
I'm so tired of slitting the throats of people calling me a violent psychopath.
#Avedo ist offline   Mit Zitat antworten
Alt 14.01.2009, 23:12  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.065
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

Wo hat die Diskussion denn begonnen?
Chriz ist gerade online   Mit Zitat antworten
Alt 15.01.2009, 00:11  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.629
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

Hallo Chriz,

per PN. Vielleicht kann Andy diese ja hier oder im APF-Forum zur Verfügung stellen.
__________________
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 15.01.2009, 12:30  
Erfahrener Benutzer
 
Registriert seit: 06.09.2008
Beiträge: 189
#Avedo befindet sich auf einem aufstrebenden Ast
Standard

Stelle mal schnell beide PNs im APF-Forum rein.
MfG, Andy
__________________
I'm so tired of slitting the throats of people calling me a violent psychopath.
#Avedo 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
win unter qemu über privoxy drieling Off-Topic Diskussionen 1 11.07.2008 11:16
Externe Variable über eine Funktion ausgeben errox PHP Tipps 2008 3 14.04.2008 11:26
[Erledigt] Kein Zugriff über ODBC mit der IP-Adresse auf MySql DB Datenbanken 4 09.02.2006 11:04
[Erledigt] Problem mit dem Füllen einer Tabelle über Formular PHP Tipps 2006 18 10.01.2006 12:51
Remote öffnen von txt über php? PHP-Fortgeschrittene 6 08.11.2005 22:58
Grafik über mehrere Zellen einer Tabelle neodrei HTML, Usability und Barrierefreiheit 9 18.08.2005 19:26
[Erledigt] Verzeichnisse meiner Homepage über WebDAV sichern PHP-Fortgeschrittene 1 08.08.2005 12:11
POSTDATA direkt über PHP schicken PHP Tipps 2005-2 2 26.07.2005 20:25
im eigenen Bereich über das Internet drucken Soese PHP Tipps 2004-2 1 23.12.2004 22:40
Webseiten aufruf über Webserver? PHP Tipps 2004-2 8 30.11.2004 18:00
suche über zwei oder mehr spalten Datenbanken 1 28.11.2004 09:51
Javascript über Javascript erstellen HTML, Usability und Barrierefreiheit 2 19.11.2004 18:02
DB-backup über Script Datenbanken 6 22.10.2004 11:23
Zugang über dyndns Datenbanken 0 12.10.2004 15:31
Umleitung über Meta-Angaben im Header abhängig vom Host PHP Tipps 2004 7 14.06.2004 12:34

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php event dispatcher, event dispatcher php, php events, php event, events php, php eventdispatcher, event php, eventdispatcher php, php datenbank kommunikation, events in php, event_dispatcher php, event-dispatcher php, datenbankkommunikation, datenbank kommunikation, php kommunikation datenbank, event software php, php com events, registry event dispatcher, objekte ablegen php, datenbank für events software

Alle Zeitangaben in WEZ +1. Es ist jetzt 16:25 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