Чи свідчить про те, що багато заяв про використання / імпорт свідчить про поганий дизайн або запах коду?


13

Як правило, я бачу декілька, що використовують оператор у верхній частині файлу класу. Приклад:

using System.Collections.Generic;
using System.IO;
using System.Xml.Linq;

Але в проекті, над яким я працюю, я декілька разів бачу 20 або більше вживань / імпортів у одному файлі класу. Це поганий дизайн? Здається, що класи, призначені для виконання однієї речі, повинні покладатися лише на кілька компонентів.


1
У Visual Studio є можливість видалити невикористані usingоператори. Ви можете побачити, скільки з цих 20 фактично використовуються.
Ден Пішельман

@Dan -Всі вони використовуються, оскільки я використовував ReSharper, щоб вилучити невикористані.
Джон Рейнор

Чи спробували ви з додаванням IoC, перетворенням на інжектор конструктора та / або перетворенням деяких точок інтеграції у вбудовані лямбда, щоб побачити, чи зменшить це кількість usingоператорів, не збільшуючи кількість класів? Майте на увазі, що збільшення кількості класів або вихідних файлів збільшить накладні витрати на управління вихідним кодом.
rwong

2
IoC просто приховує проблему.
Теластин

1
Деякі з цих речей є майже простою частиною мови та стилю програмування, який він заохочує, як Collections.Generic та LINQ, тому я б не переймався цим. Я, мабуть, зосередив би свою увагу на інших. Більшість класів, мабуть, не повинні робити IO безпосередньо, тому, можливо, якщо це знайдеться скрізь, є якесь зіткнення обов'язків або поганий рівень шару, але це залежить від програми.
Ерік Ейдт

Відповіді:


21

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

Це сказало, що це запах - іноді це призводить до чогось поганого, а іноді - просто помилкової тривоги.


Я думаю, що справжній "кодовий запах" був би, якби імпортовані простори імен усі або, здебільшого, дико різні за призначенням. Якщо чесно, я рідко мав більше 6 - 8 usingв одному файлі C #.
Грег Бургхардт

2
Я хотів би дати вам другу позначку +1, якщо зможу, лише за правильного використання терміна "запах коду"!
Йорг W Міттаг

! @Greg - Я погоджуюсь, зазвичай "вставки" пов'язані. Я думаю, що в цьому випадку мова йде про абстракцію, тому що приблизно 15-20 "пристосувань" надходять з просторів імен додатків, а решта з .net Framework.
Джон Рейнор

2

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

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

Мені важко сказати собі "мінімізувати імпорт". Або судити про успішність мого класу виключно шляхом підрахунку кількості імпортованих просторів імен. Я не можу обґрунтовано використовувати це поодиноко як ознаку успішності класу. Для мене "імпорт" - це засіб для кінця класу. Якщо робота класу чітко визначена, все інше в системі підтримки, включаючи імпорт, подбає про себе.

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