Liczba klas w przestrzeni nazw - zapach kodu?

11

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

Tim Claason
źródło
8
Jeśli klasy należą do wspomnianej przestrzeni nazw nr. Design jest z natury subiektywny, więc trudno powiedzieć i jest bardziej kwestią preferencji, jak już to określiłeś.
Chris
Whatecer StyleCop mówi, że to prawo. Założę się, że to się nie spodoba.
Job
2
Zdefiniuj „sporo”. 10? 100? 1000?
Eric King,

Odpowiedzi:

7

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
6

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.Collectionsi System.Collections.Specializeddobrych 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.

Ed James
źródło
3

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?

Parsers.XML.XmlParser.cs
Parsers.XmlParser.cs

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
0

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.

Andrey Taptunov
źródło
-1. Kolizja nazw jest ważna, ale ważne jest także grupowanie klas pojęć.
umlcat,