在领域驱动设计中,领域模型应该完全不知道任何数据持久细节。
假设一个
Employee
属于一个 Department
。域实体可能如下所示:
public Employee
{
public string EmployeeId { get; set; }
public string FirstName { get; set; }
public string LastName{ get; set; }
public Department Department { get; set; }
public int DepartmentId { get; set; }
}
public Department
{
public string DepartmentId { get; set; }
public string Name{ get; set; }
}
Employee.DepartmentId
与领域模型真正相关还是基础设施存储细节?
在这个层面上,
Employee.Department
关系确实很重要吗?
在我的例子中,这些实体将存储在 SQL 数据库中,并且数据将由实体框架检索,因此数据库中将存在一个
Employee.DepartmentId
列。
如果使用外键,实体框架中的生活会更轻松:
您说外键与域模型并不真正相关,这是绝对正确的。它是持久性模型的一部分。
所以你需要决定加入哪个阵营。您是纯粹主义者还是实用主义者?是否分开域模型和持久性模型?
我知道这个问题已经快10年了。同时,我想说,如果您的应用程序负责分配 ids(通常在服务中或直接在域对象上或与链接到数据库的持久层无关的任何内容):外键绝对是您的业务逻辑层的一部分因此完全是您的域实体的一部分。