我们似乎从网页中抽象了许多逻辑方式并创建了“帮助”类。可悲的是,这些课程听起来都是一样的,例如
ADHelper,(活动目录) AuthenicationHelper, SharePointHelper
其他人是否有大量具有此命名约定的类?
答案 0 :(得分:38)
我会说它有资格作为代码气味,但记住代码气味并不一定会带来麻烦。这是你应该研究的东西然后决定它是否可以。
话虽如此,我个人觉得这样的名字增加了很少的价值,因为它非常通用,所以类型可能很容易成为一堆非相关的实用方法。即辅助类可能会变成一个大类,它是common code smells之一。
如果可能的话,我建议找一个更接近描述这些方法的类型名称。当然这可能会提示额外的助手类,但只要他们的名字有用,我就不介意这些数字了。
前段时间我在代码审查期间遇到了一个名为XmlHelper的类。它有很多方法,显然都与Xml有关。但是,从类型名称中不清楚这些方法有什么共同之处(除了与Xml相关)。事实证明,有些方法是格式化Xml而其他方法正在解析Xml。因此IMO应该分为两个或更多部分,具有更具体的名称。
答案 1 :(得分:12)
与往常一样,这取决于具体情况。
当您使用自己的API 时,我肯定会认为这是代码气味,因为FooHelper
表示它在Foo
上运行,但行为很可能属于直接在Foo
类。
但是,当您使用现有API (例如BCL中的类型)时,您无法更改实施,因此扩展方法成为其中一种方式解决原始API中的缺点。您可以选择将此类FooHelper
命名为FooExtension
以及{{1}}。它同样臭(或不)。
答案 2 :(得分:8)
取决于课程的实际内容。
如果大量的实际业务逻辑/业务规则在辅助类中,那么我会说是。
如果这些类真的只是可以在其他企业应用程序中使用的帮助程序(在绝对意义上重复使用 - 不是复制然后自定义),那么我会说帮助程序不是代码味道。
答案 3 :(得分:7)
这是一个有趣的观点,如果一个单词在名称中成为“样板”,那么它可能有点抽搐 - 如果不是真正的气味。也许使用'Helper'文件夹然后允许它出现在命名空间中保持其使用而不会过度使用这个词?
Application.Helper.SharePoint
Application.Helper.Authentication
等等
答案 4 :(得分:4)
在许多情况下,我使用以Helper
结尾的类来包含扩展方法的静态类。对我来说似乎并不臭。你不能将它们放入非静态类中,并且类本身并不重要,所以Helper很好,我想。这样的类的用户无论如何都不会看到类名。
.NET Framework也是这样做的(例如在WPF的LogicalTreeHelper
类中,它只有一些静态(非扩展)方法)。
如果你的帮助器类中的代码被重构为“真正的”类,即适合你的类层次结构的对象,请问自己代码是否会更好。代码有在某个地方,如果你不能找到它真正属于的类/对象,比如简单的辅助函数(因此是“Helper”),你应该没问题。
答案 5 :(得分:-3)
我不会说这是代码味道。在ASP.NET MVC中,它很常见。