假设我正在使用一个小的API创建一个新库Jokes,。为了使我的API易于使用,我将其放在基本名称空间中:

namespace Jokes

    --> public interface IJoker
        --> string Joke();

    --> public static class Jokers
        --> public static IJoker NewSlapstickJoker()
        --> public static IJoker NewAbsurdJoker()
        --> public static IJoker NewCheesyJoker()


小丑的实现是内部的:

--> internal class SlapstickJoker : IJoker
--> internal class AbsurdJoker : IJoker
--> internal class CheesyJoker : IJoker




现在,我很确定以下是要遵循的准则(有人可以验证吗?):


不要从根名称空间访问子名称空间的类型。 (例如,System中的类型不知道System.Drawing中的类型)。


该指南适用于内部类吗?为了避免污染我的根名称空间,我想将内部类放在Jokes.Internal中。这意味着Jokes命名空间(Jokers)中的类型将知道子命名空间Jokes.Internal中的类型。这个可以吗?

最佳答案

为了避免污染我的根名称空间,我想将内部类放在Jokes.Internal中。这意味着Jokes命名空间(Jokers)中的类型将知道子命名空间Jokes.Internal中的类型。这个可以吗?


是的,没关系。关于在命名空间中没有类型依赖于“子”命名空间中的类型的主要指导实际上更多地是关于公共API。内部类和仅由内部类型使用的名称空间实际上是实现细节,并且不在任何此类指导范围之内。

我会坚持您认为有意义的一致意见。使用内部命名空间似乎是合理的(尽管我可能会做类似命名空间Jokes.Implementations的操作)。

同样,鉴于您的Jokers类正在构造新实例,因此它基本上是工厂。您可能要考虑命名更像JokerFactory的名称,以使这一点显而易见。对我来说,Jokers建议在类中包含一组Joker实例,而不是一组工厂方法。

08-16 11:26