Кількість класів у просторі імен - запах коду?


11

У мене є бібліотека C #, яку використовують кілька виконуваних файлів. У бібліотеці є лише кілька просторів імен, і я щойно помітив, що в одному з просторів імен є досить багато класів. Я завжди уникав занадто багато класів в одному просторі імен через категоризацію і тому, що підсвідомо, я думаю, що це виглядає «красивіше», щоб мати більш глибоку ієрархію просторів імен.

Моє запитання: чи хтось ще вважає це "запахом коду", коли в просторі імен є багато класів - навіть якщо класи відносяться один до одного? Ви б доклали чимало зусиль, щоб знайти нюанси в класах, що дозволяє здійснювати підкатегорію?


8
Якщо класи належать до зазначеного простору імен, немає. Дизайн суб'єктивний за своєю суттю, тому його важко сказати і є більш важливим питанням, як ви вже визначили.
Кріс

Whatecer StyleCop каже, що це закон. Б'юсь об заклад, це не сподобається.
Робота

2
Визначте "досить багато". 10? 100? 1000?
Ерік Кінг

Відповіді:


7

Не обов'язково. Якщо всі класи дійсно належать до категорії, визначеної простором імен, то це добре.

Що ви можете зробити, це подивитися на класи та поміркувати над можливістю злиття деяких з них. Цілком можуть бути невеликі групи з цих класів, які підтримують функцію "сім'ї", але реалізувалися окремо з історичних причин. Тепер, коли минуло достатньо часу, можлива краща композиція.


6

Вам слід уникати занадто багато просторів імен, оскільки це робить бібліотеку набагато складнішою у використанні та навігації для програміста. Крім того, для багатьох просторів імен дизайнеру може стати завданням надати точні імена для кожного простору імен, а також вирішити, якому простору імен певний клас повинен належати.

Найпростіший шлях вперед - об'єднати всі основні класи в єдиний простір імен, підключивши будь-які розширені класи сценаріїв до просторів імен; .NET Framework робить це постійно, дивіться System.Collectionsі System.Collections.Specializedна хороших прикладах цієї практики.

Маючи лише один чи два простори імен першого рівня, ваш код стане набагато простішим в навігації, при цьому ваші розширені або спеціалізовані класи заховані далеко, поки програміст не буде готовий їх виявити.


3

Поки вони належать разом і відносяться один до одного, немає проблеми з занадто великою кількістю класів у просторі імен.

Будь або не належить класу в його власне окреме простір імен є питанням особистих переваг.

Що виглядає більш природно?

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

Це повністю залежить від того, як ви хочете бачити і викликати свій код.

Особисто я віддаю перевагу окремим просторам імен лише тоді, коли знаю, що до нього буде більше одного класу.


0

Це добре. Основна причина створення просторів імен - це уникати зіткнень імен, і тільки після цього ми повинні думати про логічну сферу, яка більше стосується особистого вибору, а не правила. Звичайно, деякі розумні правила вітаються. Ніхто не хоче прокручувати класи 3k ~ 4k в одному просторі імен.

Хороший приклад - простір імен std у стандартній бібліотеці C ++, який дозволяє відокремлювати власні алгоритми від стандартних.


-1. Зіткнення імен є важливим, але концептуальне групування класів це також важливе.
umlcat
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.