假设我们有域和持久性的单独模型,一个域模型存储为两个持久性模型,如下所示。
class DomainEntity {
property1;
property2;
}
class PersistenceEntity1 {
domainProperty1;
appProperty1;
}
class PersistenceEntity2 {
domainPproperty2;
appProperty2;
}
如果您看到模型,则持久性模型中存在一些不属于域模型的额外应用程序属性,例如: modifiedOn,modifiedBy等......
现在我的问题是如何将这些值传递给基础架构层,因为Repository接口也属于Domain层,我们无法将这些属性添加到其签名中。
答案 0 :(得分:2)
可以从基础结构添加不属于域的其他属性,例如从Repository实现添加。通过这种方式,域名仍然不受基础设施问题的影响。
Repository实现可以从注入的服务中获取该数据。例如,如果持久性模型需要将当前的Authenticated用户ID存储在modifiedBy
中,则应将AuthenticatedUserService
注入到Repository实现中。
一个更简单的示例是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);
}
}