"kraj": obiekt wartości lub encja w DDD?DDD: Czy "kraj" powinien być obiektem wartościowym lub podmiotem?
Opinie tak doceniane.
Gdzie można przechowywać tablicę nazw/kodów krajów? DB? XML? W klasie?
Dzięki!
"kraj": obiekt wartości lub encja w DDD?DDD: Czy "kraj" powinien być obiektem wartościowym lub podmiotem?
Opinie tak doceniane.
Gdzie można przechowywać tablicę nazw/kodów krajów? DB? XML? W klasie?
Dzięki!
Jeśli Twoja domena jest geograficzna lub polityczna, może to być encja, ale w przeciętnym przypadku kraj to tylko wartość powiązana z takimi adresami. W takim przypadku, w kontekście twojego modelu obiektowego, jest to po prostu wartość.
Jeśli chodzi o przechowywanie, model domeny naprawdę nie obchodzi. Możesz użyć bazy danych, jeśli jest to wygodne, XML, jeśli wolisz, i klasy, jeśli masz zachowanie związane z krajami.
Jedną z cech jednostki jest to, że ma ona cykl życia, tj. Zmienia się w czasie. Obiekt wartości nie. W rzeczywistości obiekty wartości powinny być niezmienne. Zatem pytanie, które sobie postawisz, brzmi: "Czy obiekt kraju zmienia się z czasem?"
Innym aspektem, który odróżnia obiekty i obiekty wartości, jest to, że dwa obiekty wartości o tych samych właściwościach są takie same. Jeśli więc masz instancję kraju o nazwie "Francja", to jest to to samo jako kolejna instancja kraju o nazwie "Francja", mimo że są to dwa odrębne przypadki (zakładając, że jest to jedyna właściwość danego kraju ze względu na tej dyskusji). Pomyśl o łańcuchach w większości języków, ciąg "fubar" jest równy innemu wystąpieniu ciągu "fubar".
Podmioty natomiast są różne, nawet jeśli mają te same właściwości. Jeden klient o nazwie "John Smith" może nie być tym samym, co inny klient o nazwie "John Smith".
Tak więc biorąc pod uwagę te cechy, powinieneś być w stanie zdecydować. Ponieważ może istnieć tylko jedna "Francja" i nie zmienia się ona z czasem, jest to prawdopodobnie obiekt wartościowy - chyba że aplikacja musi śledzić więcej informacji o kraju, który może się zmieniać z czasem.
Francja jest już w wersji 5.0: http://pl.wikipedia.org/wiki/French_Fifth_Republic;) – MSalters
Wyobraź sobie:
Masz inny podmiot - Klient.
Odwołania do encji klienta Obiekt do obiektu.
Masz 2 instancje encji z wypełnionym Kraj obiekty o tej samej wartości (czyli „Francja”)
Usuwasz obiektu kraju od pierwszego podmiotu (lub pierwszego obiektu podmiotowa)
Cóż, jestem super spóźniony, ale jak zaproponować, aby obiekt wartości był "przechowywany"? Przypuszczam, że repozytorium nie wchodzi w rachubę, być może statyczne w wartościach pamięci? –
Obiekt wartości nie będzie zbiorczym katalogiem głównym, więc nie będzie potrzebował własnego repozytorium.Jeśli korzystasz z ORM, obiekt wartości może być odwzorowany na złożone pola w tabeli pod macierzystym agregatem głównym, a nawet, w pewnych okolicznościach, na oddzielnych tabelach, w których jedyną znaczącą tożsamością jest obiekt właściciela. – JasonTrue