Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Domain drive design
Forum PHP.pl > Forum > PHP > Object-oriented programming
coolos
Witam,

Mam mały problem odnośnie rozplanowania klasy NEWS (klasy aktualności) oraz klasy NEWS_CATEGORY (kategorii aktualności).

Jako że:
- news posiada jedną kategorię do której może być przypisany,
- jedna kategoria posiada wiele newsów czyli zachodzi relacja jeden do wielu.

nie wiem czy agragetem głównym "aggregate root" w tym przypadku będzie klasa NEWS czy też NEWS_CATEGORY.

Myślę że powinno to wyglądać mniej więcej tak jak poniżej ale pewien nie jestem:

  1. class NEWS{
  2.  
  3. //jakies pola opisujace newsa
  4. private $id;
  5. private $title;
  6.  
  7. //tutaj agregat kategorii
  8. private $category;
  9. }
  10.  
  11.  
  12. class NEWS_CATEGORY{
  13. //jakies pola opisujace kategorie
  14. private $id;
  15. private $name;
  16.  
  17. //tutaj kolekcja newsow
  18. private $news_collection;
  19. }


Nie wiem też czy lepiej tworzyć repozytorium zarówno dla newsów jak i kategorii czy też stworzyć wspólne (podobnie ma się sprawa z fabryką). Wydaje mi się że skoro kateogie newsów tyczą się wyłącznie newsów to można zrobić wspólne repozytorium.

Liczę na jakieś wskazówki,
Pozdrawiam
Inscure
To zależy od wielkości tych klas. Jeżeli zrobisz wszystko w jednej i będziesz musiał dawać prefiks "category" dla metod dotyczących kategorii newsów by się nie pogubić, to lepszym rozwiązaniem jest zrobienie tego w sposób jaki zaprezentowałeś. Zaś w przypadku, gdy cała klasa ograniczy się do 5-6 metod, to byłby to nieco przerost formy nad treścią, aczkolwiek modyfikacja byłaby łatwiejsza. Takie moje skromne zdanie.
coolos
Szkoda że właściwie nie ma żadnego dobrego artykułu w internecie który na przykładzie jakiegoś systemu newsów lub czegoś podobnego wyjaśniałby zasadę funkcjonowania DDD.

Najlepsze na jakie trafiłem to te poniżej:
- http://www.typo3-media.com/blog/mvc-news-example.html za ukazanie ciekawego modelu dziedziny.
- http://blog.fedecarg.com/2009/03/11/domain...-architectures/ chyba najlepszy art. w internecie na ten temat.
destroyerr
To chyba dlatego nie ma, że system newsów to nie jest dobra dziedzina dla DDD. Zdecydowanie można wykorzystać building blocks, ale cała metodologia to trochę za dużo.

Co do Twojego problemu to mam pytanie dlaczego założyłeś, że kategoria to encja a nie value object? Gdybyś z kategorii zrobił VO nie tracisz nic, wiele zyskujesz i (z mojego punktu widzenia) odzwierciedlasz dziedzinę.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.