使用/导入语句过多是否表示不良设计或代码异味?


13

通常,我在类文件的顶部看到一些using语句。例:

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

但是在我正在从事的一个项目中,有几次在一个类文件中看到20个或更多的uses / imports。这是不好的设计吗?看来,旨在做一件事的类应该仅依赖于几个组件。


1
Visual Studio可以选择删除未使用的using语句。您可能想要查看实际使用的那20个中有多少个。
Dan Pichelman

@Dan-它们都在使用中,因为我已经使用ReSharper清除了未使用的那些。
乔恩·雷诺

您是否尝试过添加IoC,转换为构造函数注入和/或将某些集成点转换为内联lambda,以查看它是否会减少using语句的数量而不必增加类的数量?请记住,增加类或源文件的数量会增加源代码管理的开销。
rwong

2
IoC只是隐藏了问题。
Telastyn

1
其中有些东西几乎只是它所鼓励的语言和编程风格的一部分,例如Collections.Generic和LINQ,所以我不必担心这些。我可能会把注意力集中在其他人上。大多数类可能不需要直接进行IO,因此,也许到处都可以找到职责的混合或分层不佳,但这确实取决于应用程序。
Erik Eidt'Mar

Answers:


21

可以,它表明设计不好。可能是您正在查看的类做了太多事情,但这也可能意味着您要导入的名称空间确实比名称空间分离所暗示的耦合得多。这可能是由于过度设计或过度抽象造成的,但也可能仅仅是与使用不符的设计。

就是说,这是一种气味-有时会导致您感到不舒服,有时只是一个错误的警报。


我认为,真正的“代码味道”应该是如果导入的名称空间的目的全部或大部分不同。老实说,using在一个C#文件中,我很少有超过6到8个。
Greg Burghardt

2
如果可以的话,我想再给您+1,只是为了正确使用“代码气味”一词!
约尔格W¯¯米塔格

!@Greg-我同意,通常“用法”是相关的。我认为在这种情况下,这是抽象之上的情况,因为大约15-20的“使用”来自应用程序名称空间,其余部分来自.net框架。
乔恩·雷诺

2

一个类不应大于或小于提供预期功能所需的类。

在一个应用程序中,我有一个加密类,具有一项工作:加密数据。在核心功能,日志记录和异常处理之间,环境需要11种不同的名称空间导入才能完成这项工作。

我很难告诉自己“减少进口量”。或者仅通过计算导入的名称空间的数量来判断我班的成功。我不能合理地单独使用它来表明班级的成功。对我来说,“进口”是达到阶级目标的手段。如果班级的工作定义明确,则支持系统内的所有其他事项(包括进口)都将自理。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.