Adrian
C.
projektant/programis
ta
Temat: [DDD] drzewo
---------Wymaganie biznesowe:
---------
W systemie posiadam aukcje, które mogą być przypisane do konkretnych kategorii lub podkategorii. Kategorie mają strukturę drzewa, istnieje parę kategorii głównych, które mogą posiadać podkategorie, podkategorie mogą także zawierać podkategorie, struktura w głąb jest nieograniczona. Przykład:
-Biuro i reklama[kategoria]
--Przybory kreślarskie[podkategoria]
---Cyrkle[podkategoria]
---Deski kreślarskie[podkategoria]
---Linijki i ekierki[podkategoria]
---Rapidografy[podkategoria]
--Reklama[podkategoria]
---Akcydensy (poligrafia)[podkategoria]
---Gadżety[podkategoria]
-....
Kategoria posiada nazwę i alias, alias jest unikalny na danym poziomie drzewa.
---------
Rozterki:
---------
1) Perspektywa tworzenia i edycji kategorii.
Rozsądnym wydaje się stworzenie korzeni agregujących dla kategorii głównych, które zawierają podkategorie itd. Zgodnie z koncepcją DDD zmian w podkategoriach należy dokonywać poprzez korzeń agregujący, zatem wymyśliłem sobie, że do modelu wprowadzę ścieżkę, która identyfikuje jednoznacznie położenie podkategorii w drzewie i za pomocą tej ścieżki będę edytował podkategorie. Czyli np dodanie podkategorii do konkretnej kategorii/podkategorii, wyglądałoby w uproszczeniu tak:
addSubCategory("/biuro/reklama","koszulki","Koszulki z logo") - metoda korzenia agregującego, parametry: ścieżka, alias, nazwa.
Analogicznie każda metoda modyfikująca podkategorie uzbrojona jest w ścieżkę wskazującą na konkretną podkategorię.
Czy uważacie, że takie podejście jest ok, czy może się gdzieś zafiksowałem i błądzę, a może spotkaliście się z takim problemem, albo widzicie prostsze rozwiązanie.
2) Perspektywa przypisywania kategorii do aukcji.
Ponieważ podkategorie w drzewie mogą być przesuwane, zatem używanie ścieżki jako identyfikatora nie jest możliwe. Wymyśliłem sobie, że każda kategoria i podkategoria posiada unikalny identyfikator, nadawany przy zapisie. Pewnie zapali się wam czerwona lampka:”ale zaraz przecież podczas wprowadzania kategorii nie było mowy o unikalnym id”, też mam tutaj obawy czy słusznie postąpiłem. Wystąpienie unikalnego identyfikatora, wskazywałoby na to że podkategorie nie są składnikami kategorii, tylko osobnymi bytami i może hierarchia drzewa powinna być inaczej zaprojektowana niż korzeń agregujący podkategorie, z drugiej jednak strony podkategoria nie może istnieć bez kategorii. Wracając do id i aukcja, to aukcja posiada listę ValueObjects, które posiadają id kategorii i jej nazwę.
Co o tym myślicie?