[TYPO3-german] Entity oder Value Object

Dr Dieter Porth typo3 at mobger.de
Tue Oct 7 14:35:26 CEST 2014


Am 7.10.2014 12:04, schrieb Chris Wolff - AERTiCKET AG:
> Hallo Dieter,
> ich habe auch lange gebraucht um den Unterschied zu verstehen. Und gehe jetzt hier erstmal auf den Abstrakten unterschied
> zwischen Value Object / Entity ein. Und kümmere mich wenig um extbase / flow.
>
> Value Objects:
> Value objecte speichern "werte" und es macht keinen Unterschied welche Instance. Du bekommst.
>
> Bei einem RGB (255,0,0) Wert ist in allen Belangen gleich. Selbst wenn es zwei Instanzen des Wertes gib.
> Genau so mit Tags ein tag sagen wir TAG(typo3) ist mit jedem TAG(typo3) identisch. (wenn man sie vergleicht).
> Value Objecte erweitern also deine "Grund Typen" um neue Werte. So wie ein Integer vom Wert 23 immer gleich einem anderen integer vom Wert 23 ist.
> Weil es keinen Sinn macht logisch 23 von 23 zu unterscheiden. Selbst wenn dein Computer sie an unterschiedlichen Speicher Adressen speichert.
>
> Typische Beispiele für value Objects: Farbwerte (RGB,CYMK, HSV...), Koordinaten (3d,2d,geocoordinanten...)
>
> Entity:
> Bei Personen ist es in der Regel anders:
> Es Kann Mehrere Personen Gleichen Namens geben. Trotzdem willst du sie in der Regel unterscheiden.
> PERSON(Peter,Müller) ist Ungleich PERSON(Peter,Müller) ist. deswegen, bekommmen "Enty" (Entitäten).
>
> Meistens setzt man deshalb zusätzlich ein Eindutiges merkmal "Unique Identifier" (uid) ein um Entitäten eindeutig zu bestimmen selbst wenn alle Sonstigen Mermale gleich sind.
> Also sieht deine Person Eigentlich folgender maßen aus: PERSON(uid:1, Peter,Müller), PERSON(uid:2,Peter,Müller).
>
> Bei Value Objekten Braucht man keine uid.
Hallo Chris,

dann habe ich das Konzept vielleicht verstanden.
Ich habe entity immer assoziiert mit dem Datenbank-Type enum und mit der
Übersetzung "Ding, Wesen, Objekt." Dabei habe ich immer noch einen
primitiven Datentyp unterstellt, weil für mich ein Objekt ein primitiver
Datentyp ist.

Deine Antwort läuft aber darauf hinaus, dass Entity quasi auch Vektoren,
ein JSON-String oder auch Eigenschaftensgruppen umfassen können. (Sie
sollen also quasi einen Record als Datenbankeintrag ermöglichen, wobei
auf dem Eintrag dann auch die Standardaktionen wie view, change, delete,
add, get, list sein müssen)
Wenn ich dich richtig verstanden habe, würde man in einer Extension ein
Feld "Adresse" als entinity anlegen, wobei die Entity 'Adresse' dann zum
Beispiel Informationen zu Straße, Hausnummer, Postleitzahl, Stadt, und
Nation enthalten kann. 

Am 7.10.2014 12:04, schrieb Chris Wolff - AERTiCKET AG:
> Konsequenzen (Praktisch)
> Ich Weiß nicht ob sich momentan Praktische Unterschiede in Extbase/flow gibt! 
>  Jedoch ist es wahrscheinlich Zukunft sicher wenn man bei der Extension Entwicklung Darüber Nachdenkt. Was eine Entity und was eine Value Object ist.
> Denn ich könnte mir vorstellen das zumindest die datenspeicherungs unterschiede bald einzug halten (wenn das nicht schon der fall ist)
Schade. Genau an der Stelle wird es spannend. Die Entinity macht es
möglich, mit Übersicht mächtig-schlanke Extensions zu schreiben, da man
bei der Programmierung zum Beispiel nur die Validität der 'Adresse'
sicherstellen muss und per (convention over configuration) darauf
vertraut, dass die Validität schon sichergestellt ist.
An dieser Stelle werden automatisierte Unit-Tests dann immer wichtiger,
die die richtige Verarbeitung  von 'Adresse' sicherstellen. 
 

Am 7.10.2014 12:46, schrieb Sebastian g:
> Hallo ihr beiden,
>
> vielen Dank für Eure Antworten. Also ich habe das jetzt so verstanden,
> dass die Value Objects keine "richtigen" Eigenschaften haben, die
> veränderlich sind.
> Wenn wir jetzt mal als Beispiel die Orte in der Events-Extension
> nähmen, können diese ja auch wieder Eigenschaften haben,
> beispielsweise Namen und Verwaltungsbezirk oder
> Einheitsgemeinde/Verwaltungsgesellschaft. In diesem Fall wären dann
> Value Objects ungeeignet, da bei der Änderung einer Stadt in der
> Beziehung zu einem Event die Städte in den anderen Events (mit dem
> gleichen Ort) sich nicht aktualisieren würden, sondern für den
> aktuellen Event ein zweites Stadt-Objekt (mit den veränderten
> Eigenschaften) erzeugt würde Ist das so richtig?
>
Ich denke, da kann ich dir keine Empfehlungen geben, da ich den Aspekt -
nach Chris Antwort zu urteilen - wohl noch nicht tiefgehend genug
verstanden habe.

Dieter


-- 
Dr. Dieter Porth - 
Mein kleines TYPO3-Labor: http://www.mobger.de/



More information about the TYPO3-german mailing list