代码之家  ›  专栏  ›  技术社区  ›  xofz

在哪里保存内部类?

  •  3
  • xofz  · 技术社区  · 15 年前

    Jokes, 使用一个小的API。为了使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 笑话。内部的 . 这样可以吗?

    4 回复  |  直到 15 年前
        1
  •  2
  •   Reed Copsey    15 年前

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

    是的,那很好。关于不让命名空间中的类型依赖于“子”命名空间中的类型的主要指导实际上更多地是关于公共API的。内部类和仅由内部类型使用的名称空间实际上是一个实现细节,不受任何指导。

    我会坚持你认为有意义的东西。使用内部名称空间似乎是合理的(尽管我可能会做类似名称空间的事情) Jokes.Implementations ).

    另外,考虑到你的 Jokers JokerFactory 把这件事说清楚。 ,对我来说,会建议 Joker

        2
  •  1
  •   LBushkin    15 年前

    名称空间有几个关键用途:

    1. 它们有助于将类型组织到组中,以便更容易理解它们所做的工作以及哪些类型相互关联或一起使用。

    现在谈谈你的具体问题。从外部名称空间引用内部名称空间中的类型不是很理想,但也不可怕。虽然我现在想不出一个,但如果.NET框架本身存在这种情况,我也不会感到惊讶。作为一个一般的设计原则,在层中构建代码是一个好主意;而且通常那些层的结构使得不太“专业化”的代码不知道更多的“特定代码”。

    System 包含非常通用和广泛适用的类型 System.Drawing 更专业化,包含与图像和视觉操作相关的类型。

    但是,您应该避免使用名称空间根据可访问性对类型进行分组。这无疑是对名称空间的滥用——从长远来看,很可能会导致问题(特别是因为扩展类型的可访问性是很常见的——但更改它所属的名称空间可能相当困难)。

    然而,在我看来,只要你在做什么上是一致的,并且在名称空间之间有一个合理的类型划分,我认为你会没事的。

        3
  •  1
  •   ChrisW    15 年前

    为避免污染根命名空间,我建议使用以下任一方法:

    • internal 而不是 public (这样,API的用户在程序集之外就看不到它们)

    • 然后声明为 Jokers (这样它们就不会出现在 小丑 类)

        4
  •  0
  •   Brent Arias    15 年前

    如果你按你的建议去做,那没什么大不了的,但我认为最好还是避免笑话。内部的“命名空间。我不会认为内部类“污染”了根命名空间。

    推荐文章