Ich werde ein Beispiel verwenden, um dies zu veranschaulichen:
%Vor% Company
und Person
halten eine Beziehung von vielen zu vielen. A Person
kann zu mehreren Companies
gehören und eine Company
kann mehrere People
enthalten.
Müsste ich dann eine dritte Klasse erstellen:
%Vor%oder sollte das Unternehmen damit umgehen:
%Vor% oder vielleicht Person
sollte?
Es hängt vollständig von Ihrem Nutzungsszenario ab.
Wenn Sie nur die Personen finden müssen, die für ein Unternehmen arbeiten, speichern Sie die Personenliste im Unternehmen. Wenn Sie nur die Firmen finden müssen, für die Leute arbeiten, dann speichern Sie sie dort.
Früher oder später werden Sie wahrscheinlich feststellen, dass Sie die tatsächliche Beziehung Person & lt; - & gt; Unternehmen modellieren müssen, und Sie werden eine separate Klasse erstellen, um das darzustellen. Jetzt können Sie Eigenschaften hinzufügen wie das Datum, an dem die Beschäftigung begann, das Datum, an dem sie endete usw.
Die Eigenschaften, die für eine zufällige Kombination einer Person
und Company
Instanz gemeinsam sind, können mithilfe einer "association class" modelliert werden.
Dafür gibt es eine Notation in UML, und es ist nicht schwer, ein solches Konzept in einer erweiterbaren Programmiersprache zu erstellen.
Die Idee ist, dass jedes beliebige Objektpaar, das aus einem Person
und einem Company
besteht, eine Beziehung hat und diese Beziehung selbst ein Objekt ist. Es ist weder Person
noch Company
, sondern das Objekt, das mit der Verbindung zwischen einer bestimmten Person
und Company
Instanz verbunden ist.
Dieses Zeug (Eigenschaften, Methoden) bildet eine Klasse: die Person-Company
Assoziationsklasse.
Ich habe dies in Lisp mit einigen Makros zur Definition einer Assoziationsklasse für ein bestimmtes Klassenpaar und einer globalen schwachen Hash-Tabelle für die Zuordnung von Objektpaaren zu ihrem Assoziationsklassenobjekt (für eine bestimmte Person und Firma) gemacht Es war möglich, die Assoziation abzurufen, und diese Assoziation würde verschwinden, wenn diese Objekte zu Müll werden.
Die tatsächliche Verbindung zwischen bestimmten Unternehmen und Personen ist einfach, z. Listen oder andere assoziative Datenstrukturen. Ein Personenobjekt kann eine Liste von Firmen haben und umgekehrt. Die Assoziationsklassen-Idee adressiert das Problem, wo das Person-Company-Zeug zu platzieren ist. Zum Beispiel hat jedes Person
eine Rolle innerhalb eines Company
(sagen wir mal). Wir können keine role
-Variable in einem Person
haben, weil sie viele Rollen in vielen Unternehmen haben kann. Wir können sicherlich keine role
in der Firma haben, weil es nicht einmal eine Person ist; Es hat Leute damit zu tun, die Rollen haben. Die Rolle kann in die Assoziation eingehen: Problem gelöst.
Nun, ich glaube nicht, dass Sie eine dritte Klasse brauchen.
Denken Sie daran, was ein ORM (Doctrin für PHP, Hybernate forn Java) tut:
In diesem Fall haben Sie auf einer Datenbankebene 3 Tabellen:
Firma, Benutzer und Firmenbenutzer (Join-Tabelle zwischen Benutzer und Firma, die angibt, welcher Benutzer zu welcher Firma gehört).
Sie können diese Situation auch nur mit zwei db -Tabellen abbilden:
Firma, Benutzer und Benutzer haben eine Referenz, die auf die Firma verweist. Anhand dieser Referenz können Sie also die Firma angeben, zu der der Benutzer gehört.
Endlich zu einem Klassenentwurf denke ich:
Tags und Links class php oop many-to-many