9

抽象的

哪个名字比较好?

  • Domain.PersonService
  • DomainServices.PersonService
  • DomainServices.PersonDomainService(考虑一些更长的名字,如PersonDomainServiceModelDecorator

或者是其他东西?

情况

我们有一个框架,其中每一层都有一些基类。前任。存储库、域服务、UI 等

每个逻辑层都有一个名称,用作其命名空间:

  • 包含存储库的数据层的“数据”;前任。Fx.Data.DbContextRepository
  • 域(非 Web)服务层的“服务”;前任。Fx.Services.CrudService
  • Web UI 层的“Web.UI”;前任。Fx.Web.UI.Controllers.CrudController

对于带有一些额外层的最终项目,我们也遵循相同的规则:

  • “数据”例如。Project.Data.PersonRepository
  • “服务”例如。Project.Services.PersonService
  • “Web.UI” 例如。Project.Web.UI.Controllers.PersonController
  • 代码优先实体的“实体”;前任。Entities.Person
  • 对象模型的“模型”;前任。Models.Person.Criteria,Models.Person.PersonDeleteModel

我的重点是“域服务”层,但也欢迎任何关于其他层的想法。

我们最终得出结论,“服务”不是“域服务”的合适名称,因为它可能会导致“Web 服务”或“域服务”层之间的歧义。

现在我们将“Services”命名空间更改为“Domain”或“DomainServices”。但我们还有另一个问题。我们为每个域服务类(例如PersonService)添加了“服务”后缀。DomainServices.PersonDomainServer现在有“DomainService”后缀(例如或DomainServices.DomainPersonService)似乎很难看。

因此,使用“域”作为命名空间会更漂亮,而类名表明它们是域命名空间下的服务(例如Domain.PersonService)。

4

4 回答 4

6

我会提出两个简单的想法:

  1. 尽可能定义全名(命名空间 + 类型名),没有冗余(相同的名称部分 - 域、人员、服务、模型、控制器...... - 不应出现两次)

  2. 从 .NET 框架本身获得灵感。那里有超过40000个班级!在 .NET Reflector 或 ILSpy 等工具中打开所有程序集并仔细研究。

我会想出这样的事情:

Domain
 + Person
 + PersonService // Domain service
Domain.Data
 + PersonRepository
Domain.ServiceModel // WCF, etc. I chose the same namespace as .NET Framework
 + PersonService // Service implementation, this is really a service so "service" redundancy seems unavoidable here
Domain.Web.UI
 + PersonController

好的,同样的类型名称在层次结构中多次出现是很不方便的。好吧,但这就是名称空间(和名称空间别名)也存在的原因。我认为这没什么大不了的。

于 2013-07-28T06:48:01.233 回答
3

你看到你的项目之间Domain有什么区别吗?DomainServices如果您想将服务和其他域实体保留在单独的命名空间中,我相信您将需要移至PersonService命名DomainServices空间。

大多数时候我们不研究命名空间,我们只提到类,这就是为什么我认为有DomainServices命名空间很好。同时,如果您在整个应用程序中拥有单个域并且不打算将其分离,我认为调用它会更好Domain.PersonService

关于类名中的“Doman”一词,我真的不喜欢这样,因为它增加了名称的复杂性。您应该尝试以这种方式构建您的应用程序,以确保如果您正在打开PersonService您应该 100% 确定它是域服务。你知道,当你打开时PersonRepository,它是Data层,域也是如此。

于 2013-07-23T07:23:04.473 回答
2

我会通过以下两种方式中的任何一种来做到这一点:

1)为什么没有子命名空间Services

  • Services.Web用于网络服务
  • Services.Domain用于域服务

另一方面,我将删除WebWeb.UI前提是您只有基于 Web 的 UI)。

2) 如果 Web 服务实际上存在于 Web 层中,那么它们可能位于Web.Services命名空间中,在这种情况下Web.UI也是可以接受的。域服务将简单地存在于Services命名空间中。

于 2013-07-27T11:32:47.043 回答
1

我的建议是把它写成 <Company>.<Component>.<SubComponent>.<Module>.DLL**. Microsoft 在此链接http://msdn.microsoft.com/en-us/library/vstudio/ms229048(v=vs.100).aspx上推荐了类似的内容,示例将是 **Microsoft.Practices.EnterpriseLibrary.Security。 DLL

因此,你可能想去Company.Domain.PersonService

于 2013-07-29T17:45:58.090 回答