Domain driven design 在DDD中,任何不是实体或值对象的类都应该是服务吗?

Domain driven design 在DDD中,任何不是实体或值对象的类都应该是服务吗?,domain-driven-design,naming-conventions,ddd-service,Domain Driven Design,Naming Conventions,Ddd Service,在DDD中,任何不是实体或值对象的类都应该是服务吗 例如,在库中,一些类被命名为FileReader(读取文件对象),Cache接口,该接口由MemcachedCache或FileCache,XXXManager 我知道在DDD之外,你可以随意命名你的类 但是在DDD中(和相同的例子),我应该像FileReadingService,CacheService实现的FileCacheService,XXXService,等等那样命名我的类吗?我认为这确实与您的项目命名标准有关。DDD并没有规定详细程

在DDD中,任何不是实体或值对象的类都应该是服务吗

例如,在库中,一些类被命名为
FileReader
(读取文件对象),
Cache
接口,该接口由
MemcachedCache
FileCache
,XXXManager

我知道在DDD之外,你可以随意命名你的类


但是在DDD中(和相同的例子),我应该像
FileReadingService
CacheService
实现的
FileCacheService
XXXService
,等等那样命名我的类吗?

我认为这确实与您的项目命名标准有关。DDD并没有规定详细程度


我唯一的建议是确保像
FileReader
这样的东西与您的域隔离开来。可能在您的基础结构库中,DDD中还有其他类型的对象,尽管它们的支持作用比实体、服务或ValueObject更大。像仓库和工厂之类的东西突然浮现在脑海中。但一般来说,“真实”对象,如物理对象,或问题描述中的名词,应该属于这些类别之一。

好吧,我会说是的。尽管您可能会遇到其他类型的对象,但这些对象最终可能会成为值对象。我这样想:如果它不是一个需要存储的对象,或者不是一个由聚合根管理的对象,那么它必须是一个管理它们的服务。

在我看来,将所有东西命名为实体、值对象或服务会使一切变得更简单、更有组织。但这有什么坏处吗?如果
FileReader
是域的一部分(可能不是这样的情况),您仍然会称它为
FileReader
,而不是
FileReadingService
。就像您不会命名实体和值对象一样
ProductEntity
AddressValueObject
;-)DDD是关于设计,而不是实现:@Meta Knight没有任何东西阻止我将“服务”前置到服务?例如,如何命名“UserService”(管理“用户”实体的服务)?为什么“用户服务”是一个糟糕的选择?@Matthieu:在每个域服务中添加“服务”只会让你的名字更长,而不会让它们更具描述性。但是没有规则禁止你在有意义的时候使用“服务”这个词。。。“用户服务”还可以,但它不是一个应用程序服务而不是域服务吗?@Meta Knight你说得对