| | | | |
| |||||||
| Software-Design Diskussionen auf Profi-Niveau: PHP Lösungen auf konzeptioneller Ebene |
|
| | LinkBack | Themen-Optionen | Thema bewerten |
| | |
| Erfahrener Benutzer Registriert seit: 30.07.2008
Beiträge: 1.129
PHP-Kenntnisse: Fortgeschritten ![]() ![]() ![]() | Im Anschluss an den Beitrag http://www.php.de/software-design/64...raegungen.html (Ein Entity-Typ, mehrere Ausprägungen) stehe ich jetzt vor einem weiteren Problem: Relationen mit Eigenschaften in 1-n- oder n-m-Beziehungen. Wie sollte man die abbilden? Mir sind jetzt 3 Gedanken gekommen, alle mit mehr oder weniger Vor- und Nachteilen: 1. Die Relation als Decorator für das dazugehörige Domainobjekt - Da bräuchte man allerdings immer für die n- bzw. m-Seite einen Decorator extra 2. Vererbung 3. Als generische Attribute im jeweiligen Domainobjekt - Das gefällt mir bisher noch am besten, da man auch noch das Domainobjekt in seiner grundsätzlichen Form erhält. Was sagt ihr dazu? Oder noch einen anderen Weg? |
| | |
| | |
| PHP Code Flüsterer Registriert seit: 21.08.2005 Beiträge: 4682 PHP-Kenntnisse: Fortgeschritten | |
| | |
| Moderator und Wett-König | Hallo xm22, sofern du das mit generischen Attributen umsetzt, reicht eine einzige Beziehung, die einfach als komplexes Attribut, das eine Liste von Attribute-Objekten beinhaltet. Das Befüllen und übersetzten dieser Beziehung muss ein Mapper entsprechend der Applikation übernehmen. Die Frage ist bei diesem Konzept nur, ob du die Modellierung der Datenschicht auch in der Anwendung nutzen möchtest, oder gegen diese nochmal abstrahierst. Falls letzteres, dann sieht die Domänen-Objekt-Struktur sicher etwas anderes (=konkreter für die jeweilige Applikation) aus. Folglich stellt sich die Frage IMHO nur, wenn du die Objekte der Datenhaltung auch in der Applikation nutzen möchtest. In diesem Fall präferiere ich die Lösung mit dem generischen Attribut. Wobei auch hier nochmal bedacht werden sollte, wie die Klassen-Struktur der konkreten Applikation aussieht. Oft ist es auch garnicht notwendig in einer zentral verwendeten Komponente generische Abhängigkeiten zu den verwendenen Komponenten aufzubauen, weil der Benutzer beispielsweise am Gästebuch-Eintrag hängt und nicht umgekehrt. So brauchst du dein Usermanagement nicht anzupassen, sondern einfach in deiner Gästebuch-Applikation ein konkretes Attribut für die Beziehung von Eintrag zu Benutzer zu verfassen und das Problem ist erledigt. Mal am besten mal ein komplettes UML, dann lässt sich da leichter 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! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| | |
| | |||
| Moderator und Wett-König | Hallo xm22, Zitat:
Zitat:
Vielleicht gibt dir der Thread Nachrichten-System im APF-Forum noch eine weitere Idee für die Umsetzung.
__________________ 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! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
| | |
| | |||
| Erfahrener Benutzer Registriert seit: 30.07.2008
Beiträge: 1.129
PHP-Kenntnisse: Fortgeschritten ![]() ![]() ![]() | Zitat:
Zitat:
Es geht mir primär auch nicht um das Ablegen in der DB, sondern um die Einbindung der Relationseigenschaften in der Applikation Den Thread lese ich jetzt. EDIT: Mal sehen, ob ich das so verstanden habe, wie es gemeint ist. Der relevante Teil, den ich da jetzt extrahiert habe, ist also folgender: Es gibt Message (subject|text) MessageToSender(Message|User) Folder (User|Name) MessageToFolder (Folder|Message) MessageInfo (MessageToFolder|Key|Value) Richtig? EDIT: Btw - Jetzt habe ich bei deinem ORM den Zusammenhang zwischen Relations-Config und loadRelatedElements verstanden ![]() Geändert von xm22 (12.02.2010 um 12:14 Uhr). | ||
| | |
| | |
| Erfahrener Benutzer Registriert seit: 24.10.2008
Beiträge: 291
PHP-Kenntnisse: Fortgeschritten ![]() | Ich habe versucht ein Nachrichtensystem zu entwickeln, bei dem man nicht die Nachricht ansich doppelt abspeichern muss. Dadurch, dass die Nachricht verschiedende Makierungen (gelesen, ungelesen, archiviert, versendet und was weiß ich noch alles) haben kann und das sowohl beim Sender als auch beim Empfänger, habe ich die MessageInfo eingeführt. Hier wird alles abgespeichert was nur eine Person betrifft (oder einen Ordner der einer Person gehört) Die Nachricht ansich bleibt dann einmalig im System. Somit sind auch mehrere Empfänger kein Problem. Sollte ein Benutzer die Nachricht löschen, dann wird einfach die MessageInfo gelöscht, sozusagen die Verbindung zwischen Ordner und Nachricht, dadurch sieht der Benutzer die Nachricht nicht mehr, auch wenn sie vielleicht im Hintergrund noch vorhanden ist, da ein anderer Benutzer die Nachricht noch nicht gelöscht hat. Ich würde folgendes vorschlagen: Message (Subject|Text) MessageInfo (MessageID|FolderID|Name|Status) Folder (UserID|Name) User(...) Es gibt kein wirkliches MessageToSender oder MessageToReceiver, da dies alles über das MessageInfo Object geregelt wird. Dort habe ich dann als Name "Sender" oder "Receiver" abgefragt und konnte so die Nachrichten wunderbar zuordnen. |
| | |
| | |
| Erfahrener Benutzer Registriert seit: 30.07.2008
Beiträge: 1.129
PHP-Kenntnisse: Fortgeschritten ![]() ![]() ![]() | So in etwa hatte ich mir das auch gedacht.. Mir gefällt auch, dass alles im Prinzip über Folder und nicht über den Benutzer geregelt wird. Das ist es wahrscheinlich, was Dr.E. vorhin meinte.. |
| | |
| | |
| Moderator und Wett-König | Jep, darauf wollte ich hinaus ("Kategorisierung").
__________________ 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! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| | |
| | ||
| Erfahrener Benutzer Registriert seit: 30.07.2008
Beiträge: 1.129
PHP-Kenntnisse: Fortgeschritten ![]() ![]() ![]() | Zitat:
Was mir einfällt (Pseudo-Pseudo-Code): Code: MessageInfo mit MessageID|PostausgangsFolderId des Senders|"Sender"|ID des Senders PHP-Code: Geändert von xm22 (12.02.2010 um 15:15 Uhr). | |
| | |
| | ||
| Erfahrener Benutzer Registriert seit: 24.10.2008
Beiträge: 291
PHP-Kenntnisse: Fortgeschritten ![]() | Diese Infos stehen in MessageInfo. Der Empfänger schaut in seinen Ordner, von dort geht es über die MessageInfo zur Nachricht. Sobald ich die Nachricht habe, kann ich die MessageInfo abfragen welche zur Nachricht und dem Sender gehört und bekomme dadurch auch den User raus. Kann man sicherlich auch über eine extra Beziehung lösen, aber die muss man dann auch wieder pflegen, obwohl die Informationen im Grunde schon vorhanden sind. Ich merke gerade, dass das Prinzip in diese Richtung noch gar nicht zuende gedacht ist. Daran muss ich wohl noch arbeiten Edit: Zitat:
| |
| | |
|
| Themen-Optionen | |
| Thema bewerten | |
|
|
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Alle Relationen von Tabellen in einer Datenbank abfragen | dreifragezeichen | Datenbanken | 10 | 22.04.2008 17:51 |
| Relationen in phpmyadmin exportieren | Datenbanken | 0 | 01.11.2004 20:10 | |
| [Erledigt] komplizierter query mit LEFT JOINs und relationen | Datenbanken | 2 | 03.09.2004 11:53 | |
| Besucher kamen über folgende Suchanfragen bei Google auf diese Seite |
| domainobjekte, domain-objekte, domain objekte php, datenbank domainobjekte |