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 26.01.2009, 15:47  
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 Entwurfsmuster Brücke / Bridge

Hallo,

ich muss grade für eine Klausur einige Entwurfsmuster lernen und hänge an der "Brücke". Mir ist nicht 100% klar, was die Trennung in ein Interface und eine konkrete Implementierung an Vorteilen bringt.

Brücke (Entwurfsmuster) – Wikipedia
Zitat:
Das Muster dient zur Trennung der Implementierung von ihrer Abstraktion (Schnittstelle), wodurch beide unabhängig voneinander verändert werden können.
Warum sollte man denn beide unabhängig voneinander verändern können?

Ist mit "Abstraktion (Schnittstelle)" ein Interface gemeint, oder eine konkrete Klasse? Geht es einzig um den Nachteil, dass ich Klassen, die bereits von anderen erben somit um die Möglichkeit die Schnittstelle auch anzubieten, bringe?

Wie spielen Klient, Schnittstelle und Implementierung zusammen?
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 26.01.2009, 17:15  
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

Puhh, echt kompliziert, sich da reinzudenken.
Der Schlüssel liegt vielleicht in diesem Satz: Durch Angabe eines Parameters bei der Erzeugung einer Abstraktion kann die Implementierung gewählt werden, zudem wird die Implementierung für den Klienten vollständig versteckt.

Die englische Wikiseite hat ein paar Beispiele, vielleicht helfen Dir die weiter.
__________________
--
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 gerade online   Mit Zitat antworten
Alt 26.01.2009, 18:47  
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

Das wird sie ja sowieso, also versteckt. Ich nehm mal an da steckt nicht mehr dahinter als Trennung von Schnittstelle und konkreter Implementierung.
Chriz ist gerade online   Mit Zitat antworten
Alt 27.01.2009, 19:59  
Erfahrener Benutzer
 
Registriert seit: 16.07.2005
Beiträge: 1.007
PHP-Kenntnisse:
Fortgeschritten
brian johnson befindet sich auf einem aufstrebenden Ast
Standard

folgend mein verständnis der brücke anhand einer flat_file datenbank erklärt. bitte korrigeren, wenn ich mich irre

interface_savepoint bestimmt wo die daten abgelegt werden, erstellt wenn nötig den punkt wo sie abgelegt werden und kann ihn löschen.
die implementierungen sehen dafür die klasse file die in eine resource auf ein dateiobject gibt, und memory die eine resource auf den arbeitsspeicher zurückgibt.

dann die abstrakte klasse flat_file_database die für den inhalt verantworlicht ist. sie kann davon lesen und hinzufügen.
dazu gibt es die konkrete klasse xml die daten im xml format liest/hinzufügt und die klasse csv die daten im csv format liest/hinzufügt.

konkret habe ich damit erreicht, das die verwaltung WO/WIE abgespeichert wird vom INHALT getrennt ist

PHP-Code:
<?php

interface interface_savepoint
{
    public function 
set_name($name);
    
/* <resource> */ public function open();

    
// extended functions, not necessary for pattern
    // however i think it makes understanding of sample easier
    
public function create();
    public function 
delete();
}

//saves to a file
class file implements interface_savepoint
{
    public function 
set_name($name){}
    public function 
open(){}
    public function 
create(){}
    public function 
delete(){}
}

//saves to memory
class memory implements interface_savepoint
{
    public function 
set_name($name){}
    public function 
open(){}
    public function 
create(){}
    public function 
delete(){}
}



abstract class 
flat_file_database
{
    protected 
$savepoint;

    public function 
__construct($filename,interface_savepoint $savepoint)
    {
        
$this->savepoint=$savepoint;
        
$this->savepoint->set_name($filename);
        
$this->resource=$this->savepoint->open();
    }

    abstract public function 
get();
    abstract public function 
add($what,$value);
}

// saves as xml
class xml extends flat_file_database
{
    public function 
__construct($filename,interface_savepoint $savepoint)
    {
            
parent::__construct($filename,$savepoint);
     }
    
    public function 
get()
    {
        
$simple_xml=new SimpleXMLElement(stream_get_content($this->resource));
        
// usw    
    
}

    public function 
add($what,$value){}
    
    
//konkret
    
public function add_with_attribute($what,$value,$attribute);
}

// saves as csv
class csv extends flat_file_database
{
    public function 
__construct($filename,interface_savepoint $savepoint)    
    {
            
parent::__construct($filename,$savepoint);
     }

    public function 
get(){}
    public function 
add($what,$value){}
}



$savepoint=new file;
$savepoint2=new memory;

$xml=new xml('myname',$savepoint);
$xml->add($name,$value);

$xml=new csv('myname',$savepoint2);
$xml->add($name,$value);
__________________
PHP4?!?>>>Aktuelle PHP Version: 5.2.11 || 5.3.0
Suse 11.2 *vorfreude*

Geändert von brian johnson (27.01.2009 um 21:42 Uhr).
brian johnson ist offline   Mit Zitat antworten
Alt 28.01.2009, 18:51  
Erfahrener Benutzer
 
Registriert seit: 16.07.2005
Beiträge: 1.007
PHP-Kenntnisse:
Fortgeschritten
brian johnson befindet sich auf einem aufstrebenden Ast
Standard

würde mich da doch jetzt mal wirklich über einen kommentar freuen
__________________
PHP4?!?>>>Aktuelle PHP Version: 5.2.11 || 5.3.0
Suse 11.2 *vorfreude*
brian johnson ist offline   Mit Zitat antworten
Alt 28.01.2009, 22:20  
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

Hallo Brian,

ich kenne das Pattern nicht so genau, hatte auch keine Zeit das nachzulesen. Meiner Einschätzung nach hast du Recht. Es kommt mir etwas wie OSGi, also einer Service-Architektur, vor, die auch eine Trennung zwischen Definition und Implementierung schafft.
__________________
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 29.01.2009, 09:04  
Erfahrener Benutzer
 
Registriert seit: 16.07.2005
Beiträge: 1.007
PHP-Kenntnisse:
Fortgeschritten
brian johnson befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von dr.e. Beitrag anzeigen
Hallo Brian,

ich kenne das Pattern nicht so genau, hatte auch keine Zeit das nachzulesen.
lass dir zeit

Zitat:
Zitat von dr.e. Beitrag anzeigen
die auch eine Trennung zwischen Definition und Implementierung schafft.
ja in die richtung dachte ich auch
__________________
PHP4?!?>>>Aktuelle PHP Version: 5.2.11 || 5.3.0
Suse 11.2 *vorfreude*
brian johnson ist offline   Mit Zitat antworten
Alt 29.01.2009, 23:47  
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,

ja in soetwa passt deine Implementierung und ich muss sagen, es ist wirklich ein sehr schoenes Pattern. Ich versuche jetzt fast nurnoch gegen Interfaces anstatt gegen (durch Ableitung geschaffene Tatsachen von) Klassen zu programmieren.

Stichwort Typehinting. Der Nachteil vieler Frameworks ist, dass die Klassen gegenseitig nur ihre eigenen Klassen als Parameter erlauben. Viel brauchbarer waere stattdessen das Akzeptieren eines gewissen Interfaces. Jeder koennte Elemente ohne Ableiten zu muessen ersetzen und selbst schreiben.
Chriz ist gerade online   Mit Zitat antworten
Alt 29.01.2009, 23:56  
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

Kann jemand noch mal kurz und knackig das Pattern auf einen Punkt bringen? Irgendwie kann ich mich da nicht reindenken..
__________________
--
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 gerade online   Mit Zitat antworten
Alt 30.01.2009, 10:45  
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:
Jeder koennte Elemente ohne Ableiten zu muessen ersetzen und selbst schreiben.
Das halte ich für nicht machbar. Ein Framework ist im Gegensatz zu einer Klassenbibliothek (etwa Zend Framework, eZ Components) eng verbunden. Gewisse Teile können daher einfach nicht ersetzt werden. Meiner Ansicht nach ist es viel wichtiger, dass die API so gestaltet ist, dass eigene Funktionen ohne große Hacks machbar sind.
__________________
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
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
PHP/Java Bridge - Fehler in PHP aus Java alphas PHP-Fortgeschrittene 6 14.01.2009 14:32
Welches Entwurfsmuster für Netzwerkprotokollklasse? HStev Software-Design 17 13.10.2008 09:48
Suche nach Entwurfsmuster, ~singleton + x Zergling-new PHP-Fortgeschrittene 22 17.08.2007 18:05
php Entwurfsmuster (DAO) madhatter PHP-Fortgeschrittene 1 17.07.2006 23:25
Entwurfsmuster: Wrapper Klasse Zergling-new PHP-Fortgeschrittene 24 11.03.2006 03:14
Java-PHP Bridge PHP Tipps 2005-2 0 04.10.2005 14:29
Was ist hier mit Schleife und mehrdimensionalen Array falsch PHP Tipps 2004 8 25.10.2004 14:02

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
entwurfsmuster brücke, brücke entwurfsmuster, bridge entwurfsmuster, entwurfsmuster bridge, design pattern bridge, bridge design pattern, entwurfsmuster brücke beispiel, bridge pattern beispiel, brücke (entwurfsmuster), brücke bridge, brücke design pattern, brücke entwurfsmuster beispiel, bridge brücke, design pattern brücke, design patterns bridge, pattern brücke, entwurfsmuster bridge beispiel, bridge pattern php, design pattern bridge beispiel, php design patterns bridge

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