具有与数据库对象不同的字段的聚合是正确的吗?

问题描述

我正在尝试使用DDD,但我对此表示怀疑。我正在阅读Scott Millet DDD书,并且刚刚阅读了“聚合”一章。

想象一个简单的领域模型,像这样:

class Candidate
val id: CandidateId
val name:Name
val musicStylesPreferences: List<MusicStyle>
val sportPreferences: List<Sport>
val smoking: Boolean
enum MusicStylePreference
ROCK,MetaL,POP,HIPHOP

其他对象都是这样。

如果我们考虑保留Candidate,那么我的方法是这样的:

*DatabaSEObject*
CandidateVO
val id: String
val name: String


MusicStylePreferenceVO
val candidateId: String
val StyleName: String

当我将Candidate对象保留在数据库中时,我将保留在适当的表中,而对聚合进行合并时,将查询这些表。

我不确定这种方法是否正确,我还认为也许MusicStylePreferenceSmoking等对象不需要保持一致和事务性(有些聚合的优势),并且可以不在聚合Candidate之外。

你怎么看?

我很乐意回答。谢谢:)

解决方法

这是正确的,甚至是必要的。当数据库字段名称是关于持久性的并且具有其他单独的目标和要求时,Aggregate应该为通用语言建模。

一个人为的例子;数据库可能会将全名另存为“ Firstname”,“ LastName”,但聚合中只有一个字符串。FullName是值的串联。不管它们如何持久,甚至不在哪里。