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 10.03.2011, 21:28  
Benutzer
 
Registriert seit: 16.07.2010
Beiträge: 80
PHP-Kenntnisse:
Fortgeschritten
SinnlosS befindet sich auf einem aufstrebenden Ast
Standard Subject-Observer nicht 1:n sondern n:1

Hallo zusammen,
ich stehe vor folgender Problemstellung:
Ich möchte eine Art Dashboard realisieren, das den Benutzer auf der Startseite nach dem Login über die neuesten Ereignisse unterrichtet. Solche Ereignisse können neue private Nachrichten sein, neu zugeteilte Aufgaben und/oder Zuständigkeiten, neu angelegte Projekte im eigenen Zuständigkeitsbereich etc.
Für die Realisierung habe ich an das Subject-Observer-Pattern gedacht, allerdings in etwas "entfremdeter" Form. Ich habe nicht ein Subject mit n Observern, sondern n subjects mit einem Observer. Damit verlagert sich natürlich die Aufgabe der Informationsfilterung/-aufbereitung zum Subject. Jedes Subject muss sich also selber darum kümmern die relevanten Informationen in eine Form zu bringen, die der Observer versteht.
In meinem Beispiel hatte ich daran gedacht im Subject vor jedem notify() einen Array mit den vom Dashboard benötigten Informationen bereitzustellen, der dann vom Dashboard beim update() abgerufen und verarbeitet wird.
Was mir daran noch nicht so gefällt ist eben genau dieser Punkt, dass sich ein großer Teil des Systems zu einem gewissen Grad um das Dashboard herum aufbauen muss. Mir fällt aber auch zur Zeit keine elegantere Lösung ein.
Vielleicht hat hier jemand eine Anregung?
SinnlosS ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 10.03.2011, 21:31  
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

Standardisierte Ausgabe/Auslese-Schnittstelle definieren, diese im Dashboard abprüfen, alle Elemente dort anmelden und Dashboard „ruft zurück“.
__________________
--
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 10.03.2011, 21:37  
Benutzer
 
Registriert seit: 16.07.2010
Beiträge: 80
PHP-Kenntnisse:
Fortgeschritten
SinnlosS befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von nikosch Beitrag anzeigen
Standardisierte Ausgabe/Auslese-Schnittstelle definieren, diese im Dashboard abprüfen, alle Elemente dort anmelden und Dashboard „ruft zurück“.
Schnell, kurz und prägnant
Ich kann mir grad noch nicht wirklich vorstellen wie das genau aussehen soll, aber die ersten Ideen nehmen schon Form an, ich lass mir das mal durch den Kopf gehen und melde mich dann gegebenenfalls nochmal mit konkreterem Beispiel und Frage. Danke erstmal für den Denkanstoß
SinnlosS ist offline   Mit Zitat antworten
Alt 10.03.2011, 21:38  
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

Zitat:
Ich kann mir grad noch nicht wirklich vorstellen wie das genau aussehen soll,
Ich noch weniger Kommt letztlich drauf an, was das so für Elemente sind.
__________________
--
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 12.03.2011, 18:12  
Benutzer
 
Registriert seit: 16.07.2010
Beiträge: 80
PHP-Kenntnisse:
Fortgeschritten
SinnlosS befindet sich auf einem aufstrebenden Ast
Standard

Ich habe mich gerade mal hingesetzt und ein wenig überlegt.
Momentan habe ich so ein Konzept im Kopf:
PHP-Code:
<?php
interface Reporter {
    public function 
report();
}
interface 
Listener {
    public static function 
attachReporter(Reporter $reporter);
    public static function 
detachReporter(Reporter $reporter);
    public static function 
callReporters();
}
class 
PrivateMessage implements Reporter {
    private 
$forwarder;
    private 
$recipient;
    public function 
send($forwarder,$recipient,$message) {
        
// Nachricht versenden
        
$this->forwarder $forwarder;
        
$this->recipient $recipient;
        
Dashboard::attachReporter($this);
    }
    public function 
report() {
        return 
"Neue Nachricht von {$this->forwarder} an {$this->recipient}";
    }
}
abstract class 
Dashboard implements Listener {
    private static 
$reporters = array();
    public static function 
attachReporter(Reporter $reporter) {
        
self::$reporters[] = $reporter;
    }
    public static function 
detachReporter(Reporter $reporter) {
        
self::$reporters array_diff(self::$reporters,array($reporter));
    }
    public static function 
callReporters() {
        foreach(
self::$reporters as $reporter) {
            echo 
$reporter->report();
            
// Report verarbeiten
        
}
    }
}
$PM = new PrivateMessage;
$PM->send("Hans","Karl","Hi Karl!");
Dashboard::callReporters();
?>
Sieht jemand spontan Schwächen bei dem Konzept?
Ich bin grad noch am überlegen ob es nicht sinnvoller wäre, das Interface Listener wegzulassen und stattdessen eine abstrakte Klasse zu bauen, an den sich beim Programmstart verschiedene Listener anmelden können und im Programmablauf dann die Reporter (mit konkreter Angabe für welche Listener?).
Andererseits sehen ja wiederum die Informationen die von den Reportern beim Aufruf von report() zurückgegeben werden immer gleich aus, brauche ich dann überhaupt verschiedene Listener für ein und dieselbe Information? Wobei ich gerade sowieso kein anderes Beispiel für einen Listener als das Dashboard parat hätte. Aber das heißt ja nichts. ^^

Geändert von SinnlosS (13.03.2011 um 15:24 Uhr).
SinnlosS ist offline   Mit Zitat antworten
Alt 12.03.2011, 18:36  
Supermoderator HD
 
Benutzerbild von Manko10
 
Registriert seit: 16.03.2008
Beiträge: 8.709
PHP-Kenntnisse:
Fortgeschritten
Manko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende Zukunft
Standard

Vielleicht könnte das Mediator-Pattern für dich interessant sein.
__________________
Refining Linux Advent Calendar series “24 Outstanding ZSH Gems
Manko10 ist offline   Mit Zitat antworten
Alt 12.03.2011, 19:01  
Benutzer
 
Registriert seit: 16.07.2010
Beiträge: 80
PHP-Kenntnisse:
Fortgeschritten
SinnlosS befindet sich auf einem aufstrebenden Ast
Standard

Das sieht interessant aus, lasse ich mir mal durch den Kopf gehen. Vielen Dank für den Hinweis.
SinnlosS ist offline   Mit Zitat antworten
Alt 14.03.2011, 19:49  
Benutzer
 
Registriert seit: 25.01.2011
Beiträge: 59
PHP-Kenntnisse:
Fortgeschritten
Renner befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von SinnlosS Beitrag anzeigen
(...) die neuesten Ereignisse unterrichtet. Solche Ereignisse (...)
Ich würde das groß geschriebene Wort ins Englische übersetzen.

Event-Dispatcher

Edit: Hatte einen falschen Link gesetzt. Es gibt jedoch ein empfehlenswertes Buch, welches ein gleichnamiges Pattern beschreibt.

Geändert von Renner (14.03.2011 um 19:54 Uhr).
Renner ist offline   Mit Zitat antworten
Alt 14.03.2011, 20:07  
Erfahrener Benutzer
 
Registriert seit: 21.12.2009
Beiträge: 415
PHP-Kenntnisse:
Fortgeschritten
G.Schuster ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Für solche Infos eignet sich PoEAA von Martin Fowler als Nachtlektüre.
Aber bitte die englische Ausgabe - ist bei Computer-Fachbüchern meist sehr angeraten.
__________________
actra.development - Schwabstr. 2 - 70825 Münchingen
www.actra.de/velopment/ - eMail: php.de@actra.de
Zend Certified Engineer for PHP5
G.Schuster ist offline   Mit Zitat antworten
Alt 17.03.2011, 12:54  
Benutzer
 
Registriert seit: 16.07.2010
Beiträge: 80
PHP-Kenntnisse:
Fortgeschritten
SinnlosS befindet sich auf einem aufstrebenden Ast
Standard

Danke auch an Renner und G.Schuster.
PoEAA habe ich mir gerade mal beim Händler meines Vertrauens bestellt. Hab demnächst mal wieder etwas Luft für neue Lektüre.
Am WE werde ich mich wieder meiner Problemstellung hier widmen und mir dazu dann auch nochmal das Event-Dispatcher-Pattern zu Gemüte führen.
SinnlosS 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
[Erledigt] Observer oder ein anderes muster? DarkPrisma Software-Design 9 29.01.2010 10:15
Subject in html/mine - format atoniusg PHP Tipps 2008 2 20.03.2008 09:25
Events, Observer, Henne-Ei-Problem Basti PHP-Fortgeschrittene 3 09.05.2006 15:53
Subject in Email Formular PHP Tipps 2005-2 1 10.09.2005 12:58
mail subject formatieren bexxta PHP Tipps 2005-2 1 27.08.2005 13:34

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
beispiel subject observer php, brauch observer mediator, report gedanklich verarbeiten

Alle Zeitangaben in WEZ +2. Es ist jetzt 01:33 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