最佳实践:C#扩展方法命名空间和推广扩展方法

我知道已经有一个post ,描述几乎相同,但我认为我有点不同。

我想知道的是如何组织你的扩展方法分配命名空间。 目前 – 对于我们框架中的扩展方法 – 我使用下面的命名空间模式

  • MyCompany.Web.Utils

里面我有扩展方法类。 这对我来说很好,因为我们的软件开发人员不能立即看到扩展程序。 考虑一下我有一个StringExtender类,它提供了一个扩展 String对象的非常方便的扩展方法“In” 。 有了上面提到的命名空间的扩展方法,我们的程序员将不会看到扩展方法,除非它们明确包含它的命名空间。 相反,如果我将扩展方法放在System命名空间中,所有人都会马上看到它,但是我已经读过这是不好的做法 。

所以我的问题是如何促进你的开发人员使用它们的扩展方法。

我们把它们全部放在自己的命名空间Company.Common.Extensions 。 这样,如果你有我们的任何扩展方法,你可以拥有所有的扩展方法。 另外,至less在我的商店,我们不必担心我们的开发人员不知道扩展方法。 我有相反的担心,扩展方法超负荷! 🙂

这里的问题不在于命名空间的命名,而在于开发人员缺乏文档和教育。

把它们放在任何名称空间中是有意义的,写一个wiki文章logging所有的扩展方法,然后发送一封电子邮件给你的开发者,并链接到wiki文章。

这不是一个名称空间问题,这是一个沟通问题。

如果这些方法是有用的,你需要与开发人员沟通,相反,他们的反馈(适当的判断水平)。

将任何东西放入系统命名空间是以后的灾难和混乱的秘诀。 你唯一需要做的就是把旧的框架“移植回去”,然后你可能不应该自己做,而应该使用像LinqBridge这样的工具。

要小心把所有的扩展插入到一个命名空间中,除非它们真的被广泛使用。 一些开发商可能会发现,如果木材受到任何东西的轰击,厨房的水槽就会通过智能感觉而失去木材。

保持命名空间的公司名称通常是合理的,以避免混淆。

@ Juri-如果你考虑这个问题,那么开发人员知道.NET框架中存在类X. 沟通是所有团队成员使用正确的类的关键,无论是扩展方法还是其他帮助。

正如JP所说,我经常在某种名为Extensions的子文件夹中看到扩展方法。 希望当你声明你使用my.company.web.utils命名空间实际上是Pascal的包容?

即使你把它们放在一个好的地方,也不能100%保证其他开发者会使用它们。

假设你使用Visual Studio,一种方法是创build一个自定义的Class模板(或者修改默认的模板),以便每当开发人员创build一个新的类文件时,它自动将一个using语句与你的命名空间一起使用。 有关编码效率的信息,请参阅Visual Studio 2005模板 。

是的,我认为把扩展方法放在自己的公司namespce是最佳实践。 把它放在System命名空间中是一个懒惰的操作

我们把所有的东西放在同一个Namespace和Class中,但是我们使用了部分类来保持它们的组织。

例如:

ExtensionMethods-String.cs

ExtensionMethods-DataObject.cs

ExtensionMethods-Debug.cs

…等都有部分class…

你可以通过在全局命名空间中放置扩展方法来实现你想要的。 这就是我所做的,然后他们可以不需要任何using陈述。