Definicja klasy Użytkownika i Grupy Użytkowników (zalety i wady)

Wątek przeniesiony 2022-12-04 07:22 z Algorytmy i struktury danych przez Riddle.

0

Cześć,
Chcę mieć w aplikacji obiekty, które będą reprezentować Użytkowników oraz Grupę Użytkowników. Grupa użytkowników może zawierać w sobie również inne grupy. Pytanie do bardziej doświadczonych jak najlepiej to zorganizować (które rozwiązanie jest bardziej praktyczne):
Opcja 1: Tworzę oddzielnie klasę User i oddzielnie klasę Group
Opcja 2: Tworzę jedną klasę UserOrGropu, która może być zarówno Użytkownikiem jak również Grupą użytkowników.

Na początkowym etapie pisania aplikacji różnica jest żadna, ale być może są jakieś przewagi jednego rozwiązania nad drugim? Jakie jest wasze zdanie? Możecie wymienić jakieś przewagi jednego rozwiązania nad drugim?

47

Opcja 1 brzmi lepiej ze względu na zawężony zakres odpowiedzialności co przełoży się chociażby na łatwiejsze testowanie, nie wspominając o ew. rozszerzaniu w przyszłości.

1
Kofcio napisał(a):

Cześć,
Chcę mieć w aplikacji obiekty, które będą reprezentować Użytkowników oraz Grupę Użytkowników. Grupa użytkowników może zawierać w sobie również inne grupy. Pytanie do bardziej doświadczonych jak najlepiej to zorganizować (które rozwiązanie jest bardziej praktyczne):
Opcja 1: Tworzę oddzielnie klasę User i oddzielnie klasę Group
Opcja 2: Tworzę jedną klasę UserOrGropu, która może być zarówno Użytkownikiem jak również Grupą użytkowników.

Na początkowym etapie pisania aplikacji różnica jest żadna, ale być może są jakieś przewagi jednego rozwiązania nad drugim? Jakie jest wasze zdanie? Możecie wymienić jakieś przewagi jednego rozwiązania nad drugim?

Moim zdaniem obie opcja są średnie.

To, jakich konkretnie klas i relacji między nimi użyjesz powinno się wyłonić z developowania aplikacji, testów i refaktoru, a nie próby "dopasowania" struktur klasy do jakiegoś sztucznego modelu. Moja rada: Zrefaktoruj kod, podziel go na funkcje i obiekty, i zobacz co będzie miało najwięcej sensu z programistycznej perspektywy.

Jeśli jednak mam odpowiedzieć na zadane pytanie, to wtedy obie opcje są dobre - prawie.

Opcja 1: Twórz osobno klasę User oraz Group, bo to są osobne byty
Opcja 2: Utwórz podklasę UserOrGroup, która może być klasą abstrakcyjną, pod klasą lub interfejsem.

Ale powtarzam - to jakie stworzysz, nie powinno być sprecyzowane up-front, tylko powinno się to wyłonić podczas developowania. Innymi słowy, pisz sobie kod, i zobacz która z tych opcji "bardziej pasuje".

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.