2009-03-24 16 views
43

Nie widziałem żadnych przykładów, ale zakładam, że są one zapisane wewnątrz tabeli zawierającej dane w bazie danych.W jaki sposób przechowywane są obiekty wartości w bazie danych?

Tzn. Jeśli mam obiekt główny/agregat osoby i odpowiadającą mu tabelę osób, jeśli ma on obiekt wartości o nazwie adres, wartości adresu będą zapisywane w tej tabeli osoby!

Czy ma to sens w przypadku domeny, w której mam inne podmioty, takie jak firmy itp., Które mają adres?

(Obecnie piszę aplikacji do zarządzania projektami i próbuje dostać się do DDD)

Odpowiedz

84

Jest ok, aby zapisać wartość obiektów w osobnej tabeli, dla samych powodów już opisanych. Sądzę jednak, że nieporozumienia z jednostkami kontra VO - to nie jest problem związany z wytrwałością.

Oto przykład:

Załóżmy, że Spółka i Osoba oba mają ten sam adres poczty . Które z tych stwierdzeń uważa za prawidłowe?

  1. "Gdybym modyfikować Company.Address, chcę Person.Address aby automatycznie uzyskać te zmiany"
  2. "Gdybym modyfikować Company.Address, to musi nie wpływają Person.Address"

Jeśli jest prawdą, Adres powinny być Podmiot, i dlatego to o WN stół

Jeśli jest prawdą, Adres powinny być wartość obiektu. Może być przechowywany jako składnik w tabeli jednostki nadrzędnej lub może mieć własną tabelę (lepsza normalizacja bazy danych).

Jak widać, sposób utrzymywania adresu nie ma nic wspólnego z semantyką Entity/VO.

7

Większość programistów zazwyczaj myśli w bazie danych najpierw przed wszystkim innym. DDD nie wie, jak traktuje się trwałość. To zależy od repozytorium, które sobie z tym poradzi. Możesz utrzymywać go jako plik xml, sql, tekstowy itp. Obiekty encji/agregatów/wartości są pojęciami związanymi z domeną.

Wyjaśnienie od Vijay Patel jest idealne.

2

Zacząłem uczyć się DDD z książką Erika Evansa i doskonałym przykładem projektu Dddsample Cargo. http://dddsample.sourceforge.net/

Więc dla tych (jak ja), który chce urzeczywistnić różnicę w realizacji kod niuansów w warstwie Domain modelu, powiedziałbym:

Sposób overidded Równa lub/i sameIdentityAs/SameValueAs (z interfejsu Entity i ValueObject) są, moim zdaniem, miejscem ich ekspresji.

To tylko moja Feelin' :)

myślę interesujący czytać to zbyt:

http://martinfowler.com/bliki/ValueObject.html

Powiązane problemy