【问题标题】:How do I avoid namespace and class name collision in "vertically partitioned" assemblies?如何避免“垂直分区”程序集中的命名空间和类名冲突?
【发布时间】:2010-07-02 20:20:57
【问题描述】:

“垂直分区”是指以模块而不是“层”命名的命名空间

所以,

  • MyApp.Core
  • MyApp.Accounting
  • MyApp.OrderManagement
  • MyApp.HR

而不是,

  • MyApp.UI
  • MyApp.Business
  • MyApp.Data

我遇到的唯一问题是,有时这些程序集可能具有与类型名称相同的命名空间的一部分。

假设我创建了一个与帐户相关的模块,并将其命名为 MyApp.Account.dll,基本命名空间为 MyApp.Account。不可避免地,我需要创建一个名为 Account 的类。然后我必须使用命名空间或类型别名。

除了名字很有创意之外,还有其他人经历过这种方式切割组件并处理名称冲突问题吗?

【问题讨论】:

  • 请问您需要什么来创建这样的名称空间?为什么不是 MyApp.Business.Account ?
  • 您是说命名空间是 MyApp.Business,其中包含类型 Account?如果是这样,这是处理它的一种方法 - 事实上,我正在考虑将程序集名称保留为 MyApp.Accounting,然后将命名空间保留为 MyApp.DomainObjects,在该名称下将创建 Account 类型。
  • 我创建这些垂直切片的原因是每个“模块”都可以单独开发和维护。与其将所有功能都放在“业务”下的单个程序集中,不如将许多程序集包含支持单个功能所需的任何“层”。

标签: .net assemblies namespaces naming


【解决方案1】:

过去,我处理过这两种方式:

1) 将命名空间复数或在适当的地方使它们成为动名词(添加 -ing 后缀)。例如,MyApp.Orders 可以安全地包含 Order 类。 (同样,坚持使用“MyApp.Accounting”而不是“MyApp.Account”)。

2) 通过将Domain 附加到命名空间(有点不满意,但有效)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-01
    • 1970-01-01
    • 2012-11-01
    相关资源
    最近更新 更多