Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Domain driven design 复制核心域中的构造函数_Domain Driven Design_Ddd Repositories - Fatal编程技术网

Domain driven design 复制核心域中的构造函数

Domain driven design 复制核心域中的构造函数,domain-driven-design,ddd-repositories,Domain Driven Design,Ddd Repositories,我有一些域实体,它们在基础结构层中通过类进行扩展,以封装实现细节: MyDomainEntity { List<SupportingDomain> children } SupportingDomain { ... } SqlSupportingDomain extends SupportingDomain { Long version } 当然,这种方法将基础结构细节泄漏到核心域(SqlSupportingDomain检查),这是不可取的 有人会如何处理这种情

我有一些域实体,它们在基础结构层中通过类进行扩展,以封装实现细节:

MyDomainEntity {
    List<SupportingDomain> children
}

SupportingDomain { ... }

SqlSupportingDomain extends SupportingDomain {
    Long version
}
当然,这种方法将基础结构细节泄漏到核心域(SqlSupportingDomain检查),这是不可取的


有人会如何处理这种情况?是否有更好的方法将基础结构和域问题分开?

您可以在SupportingDomain类中定义一个虚拟方法copy(),该方法返回实例的副本,然后在SqlSupportingDomain类中重写它,并在map函数中调用该方法。 这样,您就可以将复制逻辑封装在相应的类中,并避免强制转换

public MyDomainEntity(MyDomainEntity other) {
    this.children = other.children.stream()
        .map(d -> (d instanceof SqlSupportingDomain) ? new SqlSupportingDomain((SqlSupportingDomain) d) : new SupportingDomain(d))
}