0

关于典型系统中命名空间和类命名的最佳实践,有很多很好的指导。

我正在建模一个系统,该系统引入了可用指南未解决的问题(至少我无法找到它)。该系统自然有几个类共享相同的名称。

为简化起见,我将使用一个抓住问题本质的领域示例。

选项 1:我可以使用命名空间和命名空间别名来区分代码中的类。类的命名无需担心跨命名空间的重复。

足球.进攻.战术

class Play { }

足球.防守.战术

Class Play { }

使用进攻 = Football.Offense.Tactics

使用防守 = Football.Defensive.Tactics

{

Offensive.Play 进攻性Play = new Offensive.Play();

Defensive.Play defensivePlay = new Defensive.Play();

}

选项 1 问题:

  • 初级开发人员可能会感到困惑。
  • 别名会增加任何消耗命名空间的开销。
  • 如果不使用别名,每个人都会混淆代码。

选项 2:不使用命名空间,而是命名包含本质上命名空间语义的类。(进攻性比赛和防守性比赛)。

选项 2 问题:

  • 长类名的潜力。例如:OffensivePresnapAdjustmentType
  • 将命名空间语义嵌入类名会导致类名重复。

    • 进攻性基地比赛
    • 进攻阵型
    • 进攻性比赛
    • 进攻型球员
    • 进攻包
    • 进攻性Presnap调整
    • OffensivePresnapAdjustmentType
    • (还有更多,加上所有的防御等价物。)
  • 不太有效的智能感知(Visual Studio)

选项 3:创建两个程序集 - Football.Offense 和 Football.Defense。(这与选项 1 相同,有可能实现更清洁的分离)

选项 3 问题:

  • 与选项 1 相同的问题。
  • 介绍多个程序集的复杂性。

我倾向于第一个或第三个选项,但我没有足够的实践经验来知道一个决定是否会在未来的版本中导致大量繁琐的命名空间和类名重构。

我想构建命名空间并正确命名类以经受几个主要版本的时间考验。

您对这种情况下的最佳实践有何看法?

4

1 回答 1

1

您并不真正了解名称空间,我认为这是问题所在。

防守战术和进攻战术实际上是不同类型的对象。

有些战术是防守战术,有些战术是进攻战术。即防守和进攻是比赛的属性,而不是相反。

命名空间只是组织单位。

您可以为文件加载器使用名称空间,而为策略引擎使用另一个名称空间。

为什么不只拥有一个带有 play 方法的 IPlay 接口......以及实现它们的某种战术类。我完全不明白为什么您想要命名空间或想要反转自然会起作用的对象结构。

您正试图使更具体的在层次结构 imo 中占据更一般的位置。因此,为什么您会感到疼痛。

于 2013-05-23T13:17:00.460 回答