![]() |
|
|
Themen-Optionen |
|
|
Nach oben #1 |
|
Erfahrener Benutzer
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 789
|
Hi.
Ich steh grad auf dem Schlauch bzw. befürchte, dass es keine gescheite Lösung für mein Problem gibt. Ich arbeite an einer Anwendung mit Datenobjekten. Die Eigenschaften dieser Datenobjekte werden als Objekte unterschiedlicher Klassen in einem Array im Datenobjekt gehalten. Nach außen hin ist das aber nicht direkt sichtbar. Ein Aufruf: $User->password; gibt eben das Passwort als Zeichenkette aus und nicht das Passwort-Objekt. Das Ganze ist in etwa so umgesetzt: PHP-Code:
Ich werde aber nicht darauf verzichten, die Attribute als Objekte zu speichern und will auch ungern darauf verzichten, auf die beschriebene Art und Weise direkt auf die Werte der Attribute zugreifen zu können. Habt ihr da eine Idee für eine Lösung? Funktioniert nicht, oder? Basti |
|
|
|
|
|
Nach oben #3 |
|
Erfahrener Benutzer
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 789
|
Oh, ich hab grad festgestellt, dass ich eh verplant war. Ich dachte, man könne in Interfaces Attribute definieren, geht aber gar nicht.
Ich wollte sicherstellen, dass z.B. ein Objekt die öffentlich zugänglichen Attribute 'id', 'name', ... besitzt und das eben z.B. via if($Component instanceof IPageComponent) prüfen, um die Komponente andernfalls entsprechend zu dekorieren. Werd ich dann auch genau so erstmal machen - nur, dass die Interfaces eben leer bleiben. verrückte Geschichte... Basti |
|
|
|
|
|
Nach oben #4 |
|
Gast
Beiträge: n/a
|
evtl. hilft dir das data access object pattern
allerdings bin ich inzwischen eher ein fan von code-generatoren wie z.b. propel. mit einem generator hast du beides: eine explizite schnittstelle und relativ einfache verwaltung. |
|
|
|
Nach oben #5 |
|
Erfahrener Benutzer
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 789
|
Ich kann mich mit der Idee nicht anfreunden, mein Datenmodell in XML oder YAML oder so zu definieren. Ich will einfach PHP programmieren und aus den DataObjects, die die Definitionihrer selbst enthalten, ließen sich später ja auch für unterschiedliche DBs DAO-Skelette und die Datenbank generieren.
Mein Entwurf sieht dem "pluggable DAO"-Entwurf in dem Artikel ganz ähnlich. Es gibt keine konkreten DAO-Factories, sondern nur eine, die sich die Info, welches Klasse gebaut werden soll auch aus der Config holt und eben alle DAOs bauen kann. Die beommen dann ein Objekt DataSourceManager mit, aus dem sie sich die jeweilige Datenquelle ziehen können. Und die Handler heißen bei mir auch Manager (UserManager, RoleManager etc.), da sie alle Instanzen ihrer Klasse nicht nur bauen lassen, sondern auch halten und verwalten. Aber der Artikel hat mich nochmal zu ein paar Änderungen inspiriert. Danke. Mal sehen ... fertig bin ich noch nicht. Ziemlich knifflig dieses ORM - bei Sicherstellung der Datenintegrität (hoffentlich *g) die Performance irgendwie nicht ganz in den Keller rutschen zu lassen. Hab mir Propel etc. aber z.B. auch noch nicht von innen angeschaut. Musste mich erstmal from scratch dem Thema nähern. Basti |
|
|
|
|
|
Nach oben #6 | ||||
|
Gast
Beiträge: n/a
|
Zitat:
nachteil des impliziten, reflektiven codes: * extrem schwer zu debuggen * die 10% sonderfälle, die immer auftreten - wie werden die abgehandelt? * um einiges langsamer * fehler werden erst zur laufzeit sichtbar nachteil des expliziten codes: * viel code * bei handgeschrieben: sehr viel mehr arbeit aber: * explizite interfaces * fehler zur kompilierzeit sichtbar (bei php wurscht, aber trotzdem: lieber ein "fatal error: call to undefined method: getBla()" statt ein leises "return null", wenn man eine datenbank-spalte umenannt hat!) Zitat:
Zitat:
Zitat:
|
||||
|
|
|
Nach oben #7 | ||||||
|
Erfahrener Benutzer
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 789
|
Zitat:
Natürlich wäre es eigentlich unnötig, eine eigene Klasse zu abuen, wenn ds Objekt keine solchen Funktionen besitzt und man die Configuration einfach sonstwohin legen könnte. Aber ... wie du auch schon schreibst, brauch ich eben die Interfaces. Bei den DAOs ist das nochmal anders, allerdings ist das auch ziemlich unsinnig, da es ja praktisch keine DAOs gibt, deren Standard-CRUD-Funktionen nicht erweitert würden, die ja eh ausgelagert sind. Zitat:
Ich ziehe in der DaoFactory die Infos default_source und default_classnamepattern (z.B. 'Dao_%s') und für jedes Dao können auch extra eine eigene Datenquelle bzw. Klasse definiert werden (ob sich das Config-Objekt diese aus einem XML-Baum oder sonstwoher fischt, ist der Daoactory dabei völlig Wurscht). Somit bekommt dann jedes Dao seine eigene Datenquelle mitgeliefert. Zitat:
Ich weiß nicht so recht. Ich denke, das Problem muss eh auf einer anderen Ebene gelöst werden, denn mitunter liegen die Objekte ja auch in der Session und hier geht ein Locking ja mal garnicht. Basti PS: Gab im Sitepoint-Forum mal einen Beitrag, ich glaub von Markus Baker, nicht die DatenObjekte zu speichern, sondern nur die Änderungen zu dokumentieren. Auch interessant... |
||||||
|
|
|
|
|
Nach oben #8 | |
|
Erfahrener Benutzer
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.619
|
Zitat:
Falls du einen Link hast .. danke. |
|
|
|
|
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | |
|
|
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| JTable reagiert nicht auf Menueklick | tommyboy | Desktop-Applikationen und Grafik | 8 | 20.08.2006 23:38 |
| Speichern von Einstellungen - Welche API? | pago | Allgemeine Java-Programmierung | 4 | 04.11.2005 20:25 |
| kl. Zeichenprogramm - Farbe wird nicht gesetzt :*( | pro_evo | Desktop-Applikationen und Grafik | 6 | 04.02.2005 16:28 |