[TYPO3-german] Entity oder Value Object

Chris Wolff - AERTiCKET AG cwolff at aer.de
Tue Oct 7 12:04:23 CEST 2014


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.

Konsequenzen (Theoretisch):
1) Vergleichs Operatoren könne andere Resultate liefern. Value Objects: Vergleich der werte | Entity: vergleich der Instance/uid.
2) Datenspeicherung: du braucht nur einen RGB wert / TAG zu Speichern Selbst wenn 10 Objecte ihn Nutzen da er in allen Belangen Gleich ist. 
Daraus ergibt sich aber dass Value Objecte nicht verändert werden können. Sondern immer ein neues Value Object mit veränderten werten erzeugt wird.
Wenn du also Zwei RGB werte Addierst bekommst du ein Neues Object mit dem resultat. Und nicht etwa ein verändertes Object.
Entitys Sind Eindeutig, und können verändert werden. und Referenzen bleiben zeigen auf die veränderung.

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). 

Gruss chris


-----Ursprüngliche Nachricht-----
Von: typo3-german-bounces at lists.typo3.org [mailto:typo3-german-bounces at lists.typo3.org] Im Auftrag von Dr Dieter Porth
Gesendet: Dienstag, 7. Oktober 2014 11:24
An: Sebastian g; German TYPO3 Userlist
Betreff: Re: [TYPO3-german] Entity oder Value Object

Am 7.10.2014 08:42, schrieb Sebastian g:
> Hallo Leute,
>
> habe nun schon in zwei Büchern und etlichen Forenbeiträgen versucht, 
> den Unterschied zwischen Entities und Value Objects zu begreifen, aber 
> irgendwie will's nicht so richtig funktionieren ;-) Der Unterschied 
> wird an der eindeutigen Identifizierung festgemacht. Als Beispiel 
> werden meist Farben verwendet oder Tags im Foren-Kontext. Bei den Tags 
> verstehe ich das prinzip schon wieder nicht ganz: Wenn Tags vergeben 
> werden, sollten die doch sicherlich auch eindeutig sein, da ich ja 
> auch Beträge anhand von Tags auflisten kann, oder?
> Ich möchte eine kleine Veranstaltungs-Extension bauen, die ich früher 
> mal pi-based erstellt habe. Hier kann man Veranstaltungsorte
> (Ortschaften) anlegen und die dann bei den Veranstaltungen auswählen.
> In einer Suche sollen diese dann auch berüchsichtigt werden. Also ein 
> ähnlicher Fall wie bei den Tags. Also Entity oder Value Object?

Ein Link sagt in das sehr ähnliche FLOW-Projekt vielleicht mehr als tausend Worte http://docs.typo3.org/flow/TYPO3FlowDocumentation/TheDefinitiveGuide/PartV/ValidatorReference.html
Siehe Stichwort "UniqueEntityValidator"

Dann klärt sich vielleicht der Unterschied zwischen den Eigenschaften bei Value und Entity.
Für mich ist Value ein Platzhalter für Werte, die bestimmte Eigenschaften (positive Zahlen) haben oder bestimmten Mengen (positive Ganze Zahlen, IDs, alle Straßennamen in einer Großstadt) entstammen.
Entity ist für mich ein Platzhalter für Dinge/Objekte, die aus einer abzählbaren, endlichen(kleinen) Menge stammen. (Beispiel Farben, Geschlecht, Anreden, ...) Wird die Anzahl der auswählbaren Ortschaften immer klein bleiben?

Dieter


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

_______________________________________________
TYPO3-german mailing list
TYPO3-german at lists.typo3.org
http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german


More information about the TYPO3-german mailing list