DDD,值对象问题和 "new Domain()"

DDD, problem with value objects and "new Domain()"

我有一个问题,

我正在 laravel 项目中从 MVC 迁移到六边形架构和 DDD 架构。

我知道值对象表示 table X 的属性,但我有一个问题,我有一个包含 60 列的 table,它会有 60 个值对象吗? laravel 控制器中的同一个 table 有一个包含 20 个独立 table 的连接,那 20 个 table 的列也是值对象?

还有一个问题,比如我通过id查询相同table的记录,当我得到结果并且我必须创建模型时,我应该实例化60个值对象吗?

例子

$users = $this->user->find($id);

$user = new User(
    new UserId($users->id),
    value object 2,
    value object 3.... to 60 value objects
);

我会说整个连接 table 通常 是一个值对象。例如,值对象是一个包含 street/town/country 等的地址

当然,您始终可以将每一列描述为单独的 class,但在我看来,这是一种过度设计,如果您不希望该值有任何特殊的域行为(值中的方法object class) 这是在浪费时间。

您还应该考虑这 20 table 是否必须是您实体的一部分。我通常使用一个实体内的关系 table + 一些与该特定实体相关的 table,我不与其他实体共享这些相关的 table。我不会在不同实体的上下文之间创建引用。也许你有一组 entities,你需要一组 repositories/factories 给他们。如果有两个存储库,您不应该在 SQL 级别加入它们。

我知道每种情况都不一样,但您应该始终尝试编写小块代码。小型 classes、实体、限界上下文、模块、服务...通常更容易处理。

DDD 中的值对象不必是 table 的列。

值对象是您域 inmutable 的一个对象,可能不止一个 属性,没有标识,如果两个值对象的所有属性都相等,则它们是相等的。

它可以映射到数据库的一列 table,也可以映射到多个列。这是一个基础设施问题。