Impressum · Kontakt · Hilfe
Besucher online · Mitglieder



Portal > Foren > PHP > PHP-Programmierung > Datenbank-Zugriff kapseln
Antwort
 
Themen-Optionen
Alt 13.05.2008, 12:32   Nach oben    #1
javafreak
Neuer Benutzer
 
Registriert seit: 13.05.2008
Beiträge: 4
Standard Datenbank-Zugriff kapseln

Hallo allerseits!

Ich benutze in meiner PHP-Anwendung, die objektorientiert aufgebaut habe, eine Datenbank, weiß aber nicht, wie ich sie am besten einbauen soll.

Soll ich eine Klasse MySqlDatabase anlegen, über die man dann die Queries sendet? Aber dann stellt sich doch die Frage, wie die einzelnen Models an diese Datenbank gelangen, ich will sie ja nicht in meiner ganzen Anwendung über durch den Konstruktor übermitteln.

Gibt es da irgendwelche Standardansätze bzw. habt ihr ein paar Tips für mich auf Lager?

Beste Grüße,

Lukas
javafreak ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 13.05.2008, 13:04   Nach oben    #2
Elliot
Neuer Benutzer
 
Registriert seit: 18.10.2007
Ort: Bochum
Beiträge: 5
Standard

Falls du auf bereits vorhandenes zurückgreifen möchtest kannst du dir das Zend Framework ja mal anschauen, wenn du es selbst schreiben willst kannst du dich ja zumindest davon inspirieren lassen
Elliot ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 13.05.2008, 14:16   Nach oben    #3
dr.e.
Entwickler
 
Benutzerbild von dr.e.
 
Registriert seit: 05.02.2007
Ort: München
Beiträge: 113
Standard

Hallo javafreak,

aus meiner Sicht ist es egal, ob du nun in PHP oder JAVA implementierst. Die Welt der Pattern bietet dir zu diesem Problem das 3-Schicht-Architektur-Modell, das Data-Mapper-Pattern und das Domain-Object-Pattern. Nutz man diese in Kobination, würde deine Business-Schicht auf eine Komponente zurückgreifen können, die Domain-Objekte (nicht Models!) laden, speichern und löschen kann. Die Anwendung als solches hat damit keine Berührung mit irgendwelchen SQL-Queries. Diese werden allein im Mapper erstellt und gegen eine weitere Abstraktionsschicht abgesetzt. Das ist state of the art im Bereich Enterprise Application Development. Das zend Framework hilft dir da nur bedingt weiter, da es zwar Lösungen für das Active Record- oder das Table Data Gateway-Pattern implementiert, jedoch die Frage nach der allgemeingültigen Abbildung von Relationen zwischen Domain-Objekten nicht beantwortet.

Zum allgemeinen Software-Design kannst du dir mal mein Kommentarfunktion-Tutorial durchlesen (http://www.adventure-php-framework.o...ktion-Tutorial). Dieses behandelt Web-Software-Design mit Enterprise Pattern.
__________________
Grüße,
Dr.E.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Have a look at http://www.adventure-php-framework.org!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 13.05.2008, 15:55   Nach oben    #4
javafreak
Neuer Benutzer
 
Registriert seit: 13.05.2008
Beiträge: 4
Standard

Okay, danke erstmal für eure Antworten!

Ich schildere noch einmal mein Problem:
Ich habe für jeden Datentyp (User, Post, Comment usw.) eine eigene Klasse angelegt. Diese haben diverse setter- und getter-Funktionen (getTitle usw. ) und eben auch eine write Funktion, die die ganze Schose dann in die Datenbank schreibt.
Darüber hinaus habe ich Model-Klassen, welche Post-, Comment-, usw Objekte über Funktionen zurückliefern, die sie mit Hilfe von DB-Queries zusammenbauen.

Doch wie soll jede Datentyp-Klasse (Post, Comment) Zugriff auf die DB haben? Ich möchte ja nicht jeder Comment-Instanz die ganze Datenbank überreichen.

Ich hoffe, ihr versteht was ich meine. Es geht mir also nur um die Kapselung der DB-Connection.
javafreak ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 13.05.2008, 22:38   Nach oben    #5
dr.e.
Entwickler
 
Benutzerbild von dr.e.
 
Registriert seit: 05.02.2007
Ort: München
Beiträge: 113
Standard

Hallo javafreak,

zunächst noch ein Hinweis: ein Model ist keine Business-Schicht! Ein Model ist die gesammelte Information über den Zustand einer Applikation oder deren interne Abläufe.

Aus deiner Antwort schließe ich, dass du dir den Artikel nicht durchgelesen hast. Was du brauchst ist eine konkrete Implementierung einer Business- und Datenschicht, die deiner Präsentationsschicht Methoden für die Abwicklung deiner Applikation und das damit verbundene Datenhandling mitgeben. Im Konkreten Fall des Daten Ladens sollte deine Business-Komponente eine Methode wie getComments(), getCommentByID(), etc. haben. Diese liefern dir eine Liste von Comment-Objekten oder auch nur ein bestimmtes Objekt (=Domänen-Objekt) zurück. Die Datenschicht wiederum stellt der Business-Schicht einen definierten Service über die öffentlichen Methoden zur verfügung, mit denen die Business-Schicht agieren kann. Die Datenschicht wiederum sollte zur Kommunikation auch nur Domänen-Objekte (User, Post, Comment, ...) verwenden. Innerhalb der Datenschicht müssen dann die relationalen Daten aus der Datenbank in Domain-Objekte gemappt werden. Beim Speichern verhält sich das genau umgekehrt, dort müssen aus Objekten SQL-Statements erzeugt werden.

Zitat:
Es geht mir also nur um die Kapselung der DB-Connection.
Das Connection-Handling an sich kann man kapseln - Stichwort MySQL-Klasse - ist aber glaube nicht dein eigentlicher Fokus.
__________________
Grüße,
Dr.E.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Have a look at http://www.adventure-php-framework.org!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 14.05.2008, 16:25   Nach oben    #6
javafreak
Neuer Benutzer
 
Registriert seit: 13.05.2008
Beiträge: 4
Standard

Ich glaube ich habe es einigermaßen verstanden. Ich erstelle also mehrere Mapper-Klassen, die je nach Bedarf verschiedene Funktionen zum Laden von Datenbankinhalten inklusive Umformung in Objekte bereitstellen.
Die Mapperklassen können also alle mit SQL umgehen.

Domänenobjekte sind Objekte, die ganz einfach nur getter- und setter-Methoden bereitstellen. Sie sind also ganz einfach nur 'Datentransporter'.

Habe ich's richtig verstanden?

Zitat:
Ein Model ist die gesammelte Information über den Zustand einer Applikation oder deren interne Abläufe.
Was für gesammelte Informationen besitzt ein Model? Kannst du ein kleines Beispiel geben?

Viele Grüße,
Lukas
javafreak ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 14.05.2008, 17:03   Nach oben    #7
dr.e.
Entwickler
 
Benutzerbild von dr.e.
 
Registriert seit: 05.02.2007
Ort: München
Beiträge: 113
Standard

Zitat:
Domänenobjekte sind Objekte, die ganz einfach nur getter- und setter-Methoden bereitstellen. Sie sind also ganz einfach nur 'Datentransporter'.

Habe ich's richtig verstanden?
Ja.


Zitat:
Was für gesammelte Informationen besitzt ein Model? Kannst du ein kleines Beispiel geben?
Solche Infos können folgende sein:
- Anzeige welcher Inhalte in definierten Views
- Informationen über den eingeloggten Benutzer, bzw. den Login-Status
- Informationen über den aktuellen Mandanten, falls die Software mandantenfähig ist
- Stand innerhalb eines Workflows und deren Informationen aus Formularen etc.

Man muss einfach die konkrete Applikation analysieren. Oft wird recht wenig bis garkeine Inormation benötigt. In letzterem Fall kann man nach dem (H)MVC-Pattern auch ohne das "M" auskommen und die Funktion lediglich über ein Template (View) und einen zugehörigen Controller abwickeln.
__________________
Grüße,
Dr.E.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Have a look at http://www.adventure-php-framework.org!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 14.05.2008, 17:07   Nach oben    #8
javafreak
Neuer Benutzer
 
Registriert seit: 13.05.2008
Beiträge: 4
Standard

Alles klar, danke!

Lukas
javafreak ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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 Aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Entwurfsproblem: Aus Widgets in Datenbank schreiben? Basti PHP-Programmierung 3 29.03.2007 13:13
Problem bei Verarbeitung von Templates (Eigene Klassen) dago PHP-Programmierung 21 31.08.2006 16:02
Datenbank und Sicherheit sparrow Datenbanken 23 05.11.2005 17:45
Datenbank Verwaltung taskin73 Datenbanken 7 30.07.2005 17:07
Zugriff auf Dateien Im Netz CyberHoney Desktop-Applikationen und Grafik 7 22.09.2004 16:42


Alle Zeitangaben in WEZ +2. Es ist jetzt 03:39 Uhr.

Nach oben
Wir nutzen das Zend Framework, vBulletin (vBulletin v3.7.2, Copyright ©2000-2008, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.0.0) und vBSEO.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44