2016-09-20 1 views
0

Ich bin bei dieser Frage fest, wo ich meine Class Diagram in Symfony-Code verwandeln. Ich habe eine Projektklasse und eine ProjectType-Klasse. Normalerweise würde man sagen, dass ein Projekt IS eines bestimmten Projekttyps ist, was eine Vererbungsbeziehung (IS A) implizieren würde. Nun Lehre besagt, über die Vererbung:Doktrin Vererbung oder nur Assoziation in diesem Fall?

A abgebildet geordnete Klasse ist eine abstrakte oder konkrete Klasse, die persistent Entitätsstatus und Mapping-Informationen für ihre Unterklassen bietet, die aber nicht selbst ein Unternehmen.

Die Idee ist, dass verschiedene Projekttypen erstellt werden können (sie sollten überschaubar sein). Wenn die Doktrin in diesem Beispiel sagt, dass ProjectType keine Entität ist, kann ich sie nicht instanziieren. Also dachte ich an eine OneToMany-Assoziation. Ist das korrekt OOP?

+1

Ich vermute, Sie können IS A mit HAS A verwirren. – Cerad

+0

Das war meine erste Verwirrung, aber ein Projekt hat 1 und nur 1 Typ. Sagen wir ein Projekt type = symfony. Dann würden Sie sagen "Dieses Projekt ist ein symfony Projekt" – DaViDa

+0

Nehmen wir an, das Projekt enthält vielleicht eine Art Kalender. Würden Sie dann sagen "Dieses Projekt ist ein Kalender"? Mit anderen Worten, ein Projekt ist kein Projekttyp. – Cerad

Antwort

1

Sie können die Beziehung zwischen Entitäten in einer abstrakten Klasse angeben. Wenn sich die Beziehung in der konkreten Entität ändert, können Sie sie überschreiben.

Zum Beispiel haben Sie eine abstrakte Klasse namens Project, die eine Beziehung zu ProjectType hat.

Dann erstellen Sie zwei Entitäten, die sich von Project namens GreenProject und RedProject erstrecken. GreenProject kann nur einen ProjectType zugeordnet haben, sodass die in der Basisklasse definierte Beziehung in Ordnung ist.

Sie RedProject kann mehr als einen ProjectType haben, also ist es eine ManyToMany-Beziehung. Dann müssen Sie die bestehende Beziehung in der Basisklasse überschreiben, indem Sie die $ projectType-Eigenschaft in der RedProject-Klasse neu deklarieren und die entsprechenden Annotationen verwenden.

Sie können beispielsweise Ihre Superclasses in einem Bundle verteilen und sie dann in Ihrem AppBundle verwenden. Dies wird von FosUserBundle (Benutzerklasse), FosOauthBundle (z. B. Client- und Tokenklassen) und anderen verwendet.

+0

Ich sehe was du meinst, aber wäre ein DesignProject oder DevProject nicht schon ein Projekttyp? Dann würde es bedeuten, dass ich jedes Mal, wenn ich einen neuen Typ erstellen möchte, eine ganz neue Klasse erstellen muss. – DaViDa

+0

Vielleicht sind die Namen nicht die besten für die Beispiele. Ich habe DesignProject von RedProject und DevProject von GreenProject geändert und kann jetzt leichter zu verstehen sein. – Carlos

+0

Bedeutet das nicht, dass ich, wenn ich 100 unterschiedliche Projekttypen habe, 100 Entitäten erstellen muss? – DaViDa

Verwandte Themen