php.de

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

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

Antwort
 
LinkBack (1) Themen-Optionen Bewertung: Bewertung: 1 Stimmen, 5,00 durchschnittlich.
Alt 09.10.2008, 22:34  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.633
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 HStev,

Zitat:
wenn das Command die Connection bekommt sagen wir mal durch setConnection dann hängt es doch auch nicht von der Connection ab. Das einzigste wo ich sage das es ein Fehler war ist die Command History direkt in der Connection feszuhalten.
Eine direkte ABhängigkeit wäre dann gegeben, wenn die Connection den Command kennen muss um ihn ausführen zu können. Dass der Inhalt eines Commands irgendwann an die Connection gerät ist klar, nur sollte das die Connection-Klasse regeln. So kannst du beliebige Commands einhängen.

Nach längerem Nachdenken würde ich fast sagen, dass noch eine dritte Klasse ins Spiel gebracht werden sollte, die das Ganze steuert. Connection und Command sind in diesem Fall dann passiv und werden von einer Networking-Komponente gesteuert, der man eine beliebige Connection und einen beliebigen Command geben kann. So wärst du noch unabhängiger und könntest z.B. nicht nur HTTP, sondern z.B. auch FTP addressieren.

Back to topic: Zeig mir mal ein UML, daran kann man sicher einfacher diskutieren.
__________________
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
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 10.10.2008, 09:30  
Erfahrener Benutzer
 
Registriert seit: 25.04.2005
Beiträge: 1.356
HStev zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

Zitat:
Zitat von dr.e. Beitrag anzeigen
Nach längerem Nachdenken würde ich fast sagen, dass noch eine dritte Klasse ins Spiel gebracht werden sollte, die das Ganze steuert. Connection und Command sind in diesem Fall dann passiv und werden von einer Networking-Komponente gesteuert, der man eine beliebige Connection und einen beliebigen Command geben kann. So wärst du noch unabhängiger und könntest z.B. nicht nur HTTP, sondern z.B. auch FTP addressieren.
Achso verstehe du meinst also eine Klasse die den reinen Socket und dessen Funktionen bereitstellt. Eine Klasse die die Communikation handelt und die jeweiligen Unterklassen für die Commands ... hinzu würden dann noch die entsprechenden "Besucher" kommen die dann entweder die Daten speichern oder darstellen.

Naja in diesen Fall wird es bei einen Protokoll bleiben, es handelt sich hierbei um das svdrp Protokoll des VDR's in der Version 1.5 es kommt höchstens zu einer Erweiterung oder Änderung der Befehle deshalb will ich das ganze Klassen basiert haben.

SVDRP - VDR Wiki
__________________
Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.
HStev ist offline   Mit Zitat antworten
Alt 12.10.2008, 15:52  
Erfahrener Benutzer
 
Registriert seit: 25.04.2005
Beiträge: 1.356
HStev zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

So richtig fit bin ich in UML noch nicht ich arbeite mich grad erst ein.
Aber ich hoffe das es einigermaßen verständlich ist.

so hab ich mir das bisher gedacht, da PHP Klassen als Referenz übergibt brauche ich im Prinzip den Handler nicht.



ps: ist übrigens das 1. Projekt wo ich eine sinnvolle Verwendung des destructors gefunden habe, der Destructor sendet in diesen Fall noch ein QUIT an den Server damit der Server nicht ins Timeout läuft und die Connection sauber geschlossen wird.
__________________
Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.

Geändert von HStev (12.10.2008 um 15:57 Uhr).
HStev ist offline   Mit Zitat antworten
Alt 12.10.2008, 21:35  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.633
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 HStev,

hast du mal ein Code-Beispiel dazu?

Was ich nicht ganz nachvollziehen kann:
* Warum hat Connection::execute() ein Argument-Array dabei? Warum bildest du das nicht über den Command ab?
* Warum führtst du kein Answer-Objekt ein? Einen String zurückzubekommen ist problematisch, da dieser wieder geparst werden muss.
__________________
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 12.10.2008, 23:49  
Erfahrener Benutzer
 
Registriert seit: 25.04.2005
Beiträge: 1.356
HStev zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

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

hast du mal ein Code-Beispiel dazu?
ist mittlerweile schon recht umfangreich welchen Teil willst genau sehen

Zitat:
Zitat von dr.e. Beitrag anzeigen
Was ich nicht ganz nachvollziehen kann:
* Warum hat Connection::execute() ein Argument-Array dabei? Warum bildest du das nicht über den Command ab?
Da bin ich mir halt noch nicht so ganz im klaren wie ich das lösen soll.
Einige der Befehle erwarten 0-3 Parameter. Und es ist auch eigentlich kein Array sonderen soll eine Variable Parameter-Liste sein und ich frag die Parameter daher mit func_get_args ab und gib die dann nur direkt weiter an das Command.

Zitat:
Zitat von dr.e. Beitrag anzeigen
* Warum führtst du kein Answer-Objekt ein? Einen String zurückzubekommen ist problematisch, da dieser wieder geparst werden muss.
Wie meinst du das? Die Antwort für jeden Befehl sieht anders und muss anders geparsed bzw. verarbeitet werden.
Die Daten die ankommen sind im Prinzip
Einzeilige Antwort:
3 stelliger Code gefolgt von einen Datenstring und Carage Return Line Feed
Mehrzeilige Antwort:
3 stelliger Code - Zeilennummer Datenstring Carage Return
Letzte Zeile wird abgeschlossen mit CR LF

Und der Datenstring ist selber auch noch mal unterteilt je nach Befehl zb. der Befehl LSTC holt alle Kanale und gibt deren Daten nach den Schema aus wie sie in der channels.conf angegeben sind.
Channels.conf - VDR Wiki

Das würde dann im Prinzip bedeuten das ich für jeden Befehl noch ein AnswerObjekt einführen muss was aber eigentlich sinnlos wäre weil dann bräucht das Command-Object nicht weil beim senden ist nicht viel zu beachten.
__________________
Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.

Geändert von HStev (12.10.2008 um 23:53 Uhr).
HStev ist offline   Mit Zitat antworten
Alt 13.10.2008, 08:08  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.633
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 HStev,

Zitat:
ist mittlerweile schon recht umfangreich welchen Teil willst genau sehen
Ich meinte nur ein Anwendungsbeispiel. Die Implementierung selbst ist erst mal zweitrangig, die Benutzung (API) ist in unserer Diskussion interessant.

Zitat:
Da bin ich mir halt noch nicht so ganz im klaren wie ich das lösen soll.
Einige der Befehle erwarten 0-3 Parameter. Und es ist auch eigentlich kein Array sonderen soll eine Variable Parameter-Liste sein und ich frag die Parameter daher mit func_get_args ab und gib die dann nur direkt weiter an das Command.
Das ist IMHO nicht gut. Die Parameter sollen dem Command mitgegeben werden. Weiß die Connection davon bist du vom Design nicht mehr sauber.

Zitat:
Wie meinst du das? Die Antwort für jeden Befehl sieht anders und muss anders geparsed bzw. verarbeitet werden.
Anders gefragt: es gibt nie den Fall, dass mehrzeilige oder komplexe Daten zurückgeliefert werden? Falls ja, macht ein Answer-Objekt Sinn, falls nein, gebe ich dir Recht.
__________________
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.10.2008, 09:35  
Erfahrener Benutzer
 
Registriert seit: 25.04.2005
Beiträge: 1.356
HStev zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

Zitat:
Zitat von dr.e. Beitrag anzeigen
Anders gefragt: es gibt nie den Fall, dass mehrzeilige oder komplexe Daten zurückgeliefert werden? Falls ja, macht ein Answer-Objekt Sinn, falls nein, gebe ich dir Recht.
Doch hab ich ja gesagt es hängt vom Befehl der LSTC liefert ein mehrzeiliges Ergebnis aber mit eigener Struktur. Wie gesagt wenn ich ein Answer Objekt einführe dann hätte das Command nur noch eine Methode die vielleicht 3-4 Zeilen Code enthält.
__________________
Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.
HStev ist offline   Mit Zitat antworten
Alt 13.10.2008, 09:48  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.633
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 HStev,

Zitat:
Wie gesagt wenn ich ein Answer Objekt einführe dann hätte das Command nur noch eine Methode die vielleicht 3-4 Zeilen Code enthält.
Das glaube ich zwar jetzt nicht ganz, aber in diesem Fall musst du entscheiden, ob du eine saubere Datenstruktur haben möchtest oder nicht. Ich wäre für Answer-Objekt.
__________________
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

LinkBacks (?)
LinkBack to this Thread: http://www.php.de/software-design/47682-welches-entwurfsmuster-fuer-netzwerkprotokollklasse.html
Erstellt von For Type Datum
Adventure PHP Framework - Literatur This thread Refback 02.12.2008 15:17

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
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


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