DDD:域和持久性的单独模型



假设我们有单独的域和持久性模型,一个域模型存储为两个持久性模型,如下所示。

class DomainEntity {
    property1;
    property2;
} 
class PersistenceEntity1 {
    domainProperty1;
    appProperty1;
}
class PersistenceEntity2 {
    domainPproperty2;
    appProperty2;
}

如果您看到模型,则持久性模型中有一些不属于域模型的额外应用程序属性,例如 modifiedOn、modifiedBy 等...

现在我的问题是如何将这些值传递给基础架构层,因为存储库接口也属于域层,我们无法将这些属性添加到其签名中。

不属于

域的其他属性可以从基础架构添加,例如从存储库实现添加。通过这种方式,域仍然与基础设施问题无关。

存储库实现可以从注入的服务中获取该数据。例如,如果持久性模型需要将当前经过身份验证的用户 ID 存储在modifiedBy中,则应将AuthenticatedUserService注入到存储库实现中。

一个更简单的示例是可以设置为当前系统日期的modifiedOn,而无需注入任何服务。

作为伪代码:

// Domain layer
class DomainEntity {
    property1;
    property2;
} 
// Infrastructure layer
class PersistenceEntity1 {
    domainProperty1;
    Date modifiedOn;
}
class PersistenceEntity2 {
    domainPproperty2;
    UserId modifiedBy;
}

class Repository {
    // dependency injection
    constructor(AuthenticatedUserService auth){ 
        this.auth = auth;
    }
    function save(DomainEntity d) {
       PersistenceEntity1 p1 = new PersistenceEntity1(d.property1, Date.current() );
       PersistenceEntity2 p21 = new PersistenceEntity1(d.property1, this.auth.getAuthenticatedUserId() );
       db1.save(p1);
       db2.save(p2);
    }
}

最新更新