Cześć,
Wiem, że temat na forum przewijał się zapewne miliony razy i sam na kilka wątków trafiłem ale dalej mam sporo wątpliwości i może na moim przykładzie łatwiej będzie mi to zrozumieć.
Chce napisać sobie małą apke "wypożyczalnia video" (zainspirowany
). Chciałbym ze to chociaż troche przypominało ddd, plus dookoła jakiś heksagonal. Domyślam się, że to wszystko to jest/będzie zapewne 'lekki' overengineering, ale na małym projekcie prościej będzie mi to zrozumieć i poukładać sobie w głowie.
Zacząłem sobie od domeny no i mamy Film. Robie sobie obiekt domenowy, który ma:
@Value
class Film {
Director director;
Title title;
Price price;
Studio studio;
Genre genre;
Language language;
Country country;
No tak. Normalnie kusiłoby mnie, żeby title dac jako String, cene jak BigDecimal albo w ogole double itp itd. I tak jak to, ze cene fajnie sobie przedstawić jako valueObject to mnie jeszcze kupuje, to np mam problem z takimi bytami jak, director, studio(...). To, że reżysera trzymam jako VO 'dziwnie' mi w kodzie wygląda.
- na razie mnie nie interesuje gdzie to bede trzymal (sql/nosql/hashmapa) i zakladam, ze to dobrze bo domena jest odseparowana od persystencji. Nawet nie wiem czy bede chcial tworzyc tabele/kolekcje jakąkolwiek osobna strukture 'bazodanowa' pod np. reżysera. Może do końca będzie to tylko sucha informacja przypisana do filmu.
- Ale... może jednak okaże się, że chciałbym wyciagnac z 'bazy' wszystkie filmy danego rezysera. W takiem sytuacji np w jakiejsc relacyjnej bazie juz wleci tabela director, i wtedy tez w moim kodzie rezyser jako taki nie bedzie juz prostym VO bo bedzie musial miec chocby id (choc czy domain object potrzebuje, powinien miec id? Domnowo film moze sie skladac, z tytulu, rezysera, ceny itd. ale id bazodanowy to srednio mi w 'jestestwo' filmu pasuje).
- A skoro okazaloby sie, ze jedanak Director bedze czyms wiecej niz VO, to moze Film powienien miec tylko jego ID a nie calego rezysera?
Wiem, że to co napisałem jest dosc chaotyczne, ale sprowadza sie do - jak powinienem zapatrywac sie na VO i jak nawiazywac relacje miedzy domain object Film a potencialnym Domain Object Director?