Mam bibliotekę C #, która jest używana przez kilka plików wykonywalnych. W bibliotece jest tylko kilka przestrzeni nazw i właśnie zauważyłem, że w jednej z tych nazw jest sporo klas. Zawsze unikałem zbyt wielu klas w jednej przestrzeni nazw z powodu kategoryzacji, a ponieważ podświadomie myślę, że „ładniejsza” jest głębsza hierarchia przestrzeni nazw.
Moje pytanie brzmi: czy ktokolwiek uważa to za „zapach kodu”, gdy przestrzeń nazw ma wiele klas - nawet jeśli klasy te są ze sobą powiązane? Czy włożyłbyś wiele wysiłku w znalezienie niuansów w klasach, które pozwalają na podkategorię?
Odpowiedzi:
Niekoniecznie. Jeśli wszystkie klasy rzeczywiście należą do kategorii zdefiniowanej przez przestrzeń nazw, to jest w porządku.
Możesz spojrzeć na klasy i zastanowić się nad możliwością połączenia niektórych z nich. Możliwe, że małe grupy tych klas obsługują funkcjonalność „rodzinną”, ale zostały wdrożone osobno z kilku powodów historycznych. Teraz, gdy upłynie wystarczający czas, może być możliwa lepsza kompozycja.
źródło
Należy unikać posiadania zbyt wielu przestrzeni nazw, ponieważ znacznie utrudnia to korzystanie z biblioteki i nawigację dla programisty. Ponadto w przypadku wielu przestrzeni nazw projektant może stać się wyzwaniem, aby podać dokładne nazwy dla każdej przestrzeni nazw, a także zdecydować, w której przestrzeni nazw powinna należeć dana klasa.
Najprostszym sposobem jest umieszczenie wszystkich klas podstawowych w jednej przestrzeni nazw, umieszczając wszelkie zaawansowane klasy scenariuszy w podprzestrzeniach; .NET Framework robi to cały czas, zobaczyć
System.Collections
iSystem.Collections.Specialized
dobrych przykładów tej praktyki.Z tylko jedną lub dwiema przestrzeniami nazw pierwszego poziomu, twój kod stanie się znacznie łatwiejszy w nawigacji, z zaawansowanymi lub specjalistycznymi klasami ukrytymi, dopóki programista nie będzie gotowy do ich odkrycia.
źródło
Tak długo, jak należą one do siebie i nie są ze sobą powiązane, nie ma problemu z zbyt dużą liczbą klas w przestrzeni nazw.
Czy dana klasa należy w swój własny odrębny nazw jest kwestią osobistych preferencji.
Co wygląda bardziej naturalnie?
Zależy to całkowicie od tego , jak lubisz widzieć i wywoływać swój kod.
Osobiście wolę osobne przestrzenie nazw tylko wtedy, gdy wiem, że będzie do nich więcej niż jedna klasa.
źródło
Jest okej. Podstawowym powodem posiadania przestrzeni nazw jest unikanie kolizji nazw i dopiero po tym powinniśmy pomyśleć o zakresie logicznym, który jest bardziej kwestią osobistego wyboru niż reguły. Oczywiście mile widziane są niektóre rozsądne zasady. Nikt nie chce przewijać klas 3k ~ 4k w jednej przestrzeni nazw.
Dobrym przykładem jest standardowa przestrzeń nazw w standardowej bibliotece C ++, która pozwala oddzielić własne algorytmy od standardowych.
źródło