Adrian C.

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?
Jarosław Żeliński

Jarosław Żeliński Analityk i
Projektant Systemów

Temat: [DDD] drzewo

osobiście rozważył bym podejście, w którym kategoria to atrybut a nadawałby je obiekt mający wiedzę o drzewie zależności tych atrybutów...

patrząc na to jak na "DDD" zastanowił bym się nad tym czym są aukcje (a konkretnie sprzedawane na aukcjach przedmioty).

Inny pomysł to agregat odtwarzający hierarchię kategorii, każdy obiekt to kategoria, hierarchia budowana jest tu nie jako system dziedziczenia a jako drzewiasty system kompozycji, każdy obiekt w tej hierarchii ma swoje ID. Przyporządkowanie aukcji do kategorii to ustawienie jej atrybuty ID_kateogrii na wartość identyfikatora obiektu prezentującego miejsce w hierarchii.

W tym układzie obserwator przemieszcza się po agregacie opisującym to drzewo, każdy taki obiekt ma operację wyszukania obiektów (aukcjii) i ID równym jego ID.

To coś takiego jak:
- drzewo kategorii to jakby budynek z hierarchia pomieszczeń, nadanie kategorii to umieszczenie obiektu w danym pomieszczeniu....

to tak na szybko...:)

konto usunięte

Temat: [DDD] drzewo

---------
[...] struktura w głąb jest nieograniczona.

oczywiście że jest ograniczona... tak jak wszystko na tym świecie.
Pytanie kto wyznaczy granicę - inżynier, czy pamięć komputera.

Przykład:

-Biuro i reklama[kategoria]
--Przybory kreślarskie[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

gdzie znajdę definicję "korzenia agregującego" ?
dla kategorii głównych, które zawierają podkategorie itd. Zgodnie z koncepcją DDD zmian w podkategoriach należy dokonywać poprzez korzeń agregujący,

gdzie znajdę takie informacje ?
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") -


Proponuje metodę "AddSubCategory" na obiekcie klasy "Category". Nie będzie problemu z wpisaniem "path".

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ę.

'ścieżki' to bagno. (abstrahując od tematu) Ciekawe z jakiego powodu początkujący programiści je uwielbiają.
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.

Według mnie - błądzisz. Ścieżki są skomplikowane bardziej niż się wydaje. Zamiast nich stosuj -nazwy- lub liczby.
2) Perspektywa przypisywania kategorii do aukcji.
Ponieważ podkategorie w drzewie mogą być przesuwane,

To też jest głupi pomysł. Ponieważ przez to przeszedłem pozwolę sobie na ocenę - klient tak samo robi biznes jak Ty program.

Jak byś zareagował, gdybyś dowiedział się, że twój klient zadaje analogiczne (do twoich) pytania na innym forum ?
zatem
używanie ścieżki jako identyfikatora nie jest możliwe.

Jak to nie ? Zapytaj klienta, czy podkategoria 'xyz' w kategorii 'abc'
jest tym samym co podkategoria 'xyz' w kategorii 'cba'.
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.

Myślę, że to krok w dobrą stronę.
99% działających systemów opiera się na 'liczbach' a nie 'ścieżkach'.
Wystąpienie unikalnego identyfikatora, wskazywałoby na to że podkategorie nie są składnikami kategorii, tylko osobnymi bytami

Zadaniem identyfikatora jest identyfikacja (np. podkategorii) a nie 'wskazywanie lokalizacji i jakości (pod) kategorii'.
Identyfikator to bardzo praktyczny pomysł.
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

wow %-)
Takie coś nazywam 'kreatywnością która wymknęła się spod kontroli'.
Wracając do id i aukcja, to aukcja posiada listę ValueObjects, które posiadają id kategorii i jej nazwę.
Co o tym myślicie?

Myślę, że powinieneś skupić się na tym 'co', a nie 'jak', powinieneś zrobić.Jakub Wojt edytował(a) ten post dnia 21.09.11 o godzinie 21:40

Następna dyskusja:

Przykład DDD




Wyślij zaproszenie do