Jarosław
Żeliński
Analityk i
Projektant Systemów
Temat: pojekt portalu imprezowego
Na początek uwaga: wymieniamy się postrzeganiem diagramu i problemu, nie jest absolutnie dyskusja "co jest prawdziwe i jedynie słuszne".Artur Kęska:
Ogólnie z tego Co Pan tu pisze wynika, że najlepszy był pierwszy diagram (pomijając chęć posiadania metod). Mi na tym pierwszym diagramie przeszkadzała jednak gęsta sieć powiązań, oraz brak wyraźnych odpowiedzialności za trwałość obiektów. Ale na to nikt nie zwrócił dotychczas uwagi więc może to nikomu nie przeszkadza.
Nic takiego nie powiedziałem, gęsta sieć powiązań raczej czyni go złym diagramem.
Jarek Żeliński:
Usunięcie użytkownika powoduje zniknięcie wszystkiego poza eventem.
Hmm, może ale jak Pan to wykoncypował, zaiste zagadka...
Usuwając użytkownika usuniemy wszystko co jest z nim w kompozycji. Pozostanie tylko Event i to z nim zagregowano.
Jest pewna niekonsekwencja zasady wedle której wiedza o czymś jest zamykana w jednym obiekcie: galeria jest elementem eventu, nie rozumiem dlaczego galeria dziedziczy (i co?) z tabeli komentarzy (dziedziczenie oznacza specjalizację),
Z diagramu poprzednika wynika, że zarówno obiekty Event Galeria jak i Photo mogą być komentowane, oraz należą do do jakiegoś użytkownika.
Nadal nie wiem dlaczego Event, Gallery i Photo jest szczególnym przypadkiem CommentTable.
Wygląda więc na to że warto te cechy pokazać jako wspólne, z czego przynajmniej relacja posiadania przez
Relacja to cecha baz relacyjnych a nie systemów obiektowych.
Jeżeli tablica komentarzy zarządza komentarzami to "jakim prawem" pozwalamy użytkownikowi "obejść" posiadacza tych danych i dajemy mu komentarze "na skróty".
Wręcz przeciwnie. Skoro użytkownik wystawia komentarze to pewnie jest też ich właścicielem.
To łamie zasadę dobrego projektowania obiektowego: jedna odpowiedzialność w jednym miejscu. Jeżeli User chce się dowiedzieć co napisał rok temu prosi o to Commenttable.
Ten diagram nadal nie jest obiektowy moim zdaniem,
Ojj, zabolało...
jak wyżej...
to jest kolejna próba wcielenia modelu danych lub jakiegoś modelu pojęciowego.
Mam szczerą nadzieję, że się pan z tych słów wycofa.
Raczej nie :), uwagi jak wyżej :).
Diagram klas jako narzędzie może opisywać zarówno model pojęciowy jak model jakiejś rzeczywistości odwzorowywanej (modelowanej) w kodzie.
Od modelu dziedziny do kodu jeszcze daleka droga.
Jak dla kogo, w najpopularniejszym wzorcu MVC model dziedziny i model kodu są od strony koncepcji wręcz tożsame.
Więcej o tym tu:
http://it-consulting.pl/autoinstalator/wordpress/index...
jest tam także odnośnik do obszernego artykułu na MSDN na ten temat.
Jeżeli mogę sobie wyobrazić jakie atrybuty w tych klasach tak nijak nie przychodząc mi do głowy metody.
Nie wierzę, że Pan nie umie. Podpuszcza mnie Pan :-)
Domysły zabijają projekty, przykłady, przykłady :)
Proponuje rozważenie kolejnej rzeczy: jeżeli mówimy o diagramie klas w kontekście oprogramowania obiektowego to jeżeli kompozycja ma głęboki sens tak agregacja traci go zupełnie bo nie ma odpowiednika rzeczywistości modelowanej.
Ma. Wynikają z niej odpowiedzialności klas.
Odpowiedzialności klas to ich interfejs czyli metody a nie atrybuty, zwracam uwagę, że wszelkie asocjacje (a są nimi także kompozycja i agregacja) to atrybuty klas a nie ich metody.
Co do zasady zgoda. Ale..
Kto powiedział, że implementacja ma być w hibernate?
Nikt i nie ma tu o tym mowy...
A nawet gdyby to akurat z tym konkretnym diagramem nie było by raczej kłopotu. Poza tym chyba mowa była o modelu dziedziny a nie diagramie klas.
każdy z tych diagramów to diagram klas: model kodu obiektowego, model dziedziny czy model taksonomii (związków pojęciowych) to diagramy klas.
Polecam gorąco karty CRC, jako narzędzie analizy (która powinna poprzedzać projektowanie) są doskonałe.
Na koniec: zanim narysujemy jakikolwiek diagram należy go opisać:
1. co modeluje
2. jaką pragmatykę stosujemy (w tym wzorce, metafory itp.)
bez tych dwóch ustaleń nawet ta dyskusje jest "lekko" bezprzedmiotowa bo bez tych ustaleń można uznać, że każdy ma rację.
Ja nie ukrywam, że w kwestii pragmatyki stosuję standardowe wzorce obiektowe (Go4), zasadę projektowania poprzez kontrakty, zamykanie konkretnej wiedzy i odpowiedzialności w jednaj klasie i pewnie kilka innych.
Tak więc uwaga dla każdego kto modeluje z pomocą diagramów (nie tylko UML): opisz co model modeluje i jaką pragmatykę zastosowano. Pragmatykę pomocniczo można opisać z pomocą metafory lub kilku metafor.Jarek Żeliński edytował(a) ten post dnia 02.02.11 o godzinie 10:25