Domain driven design 从单独的数据源检索的值对象?

Domain driven design 从单独的数据源检索的值对象?,domain-driven-design,soa,Domain Driven Design,Soa,我正在开发一个系统来模拟一个过程。这个过程的一个特性是它的速率。我认为利率是一个价值对象,因为它没有特定的标识。这个速率是从我不拥有的服务(想想SOA,而不是DDD服务)中获取的。对于每种类型的流程,服务可能会有所不同,因为这些流程都构建了团队和服务,以支持它们保存我想要的数据。我如何在DDD中组织它 下面是一些代码来帮助解释: class Process { private final Rate rate; ... public Process( Rate rate

我正在开发一个系统来模拟一个过程。这个过程的一个特性是它的速率。我认为利率是一个价值对象,因为它没有特定的标识。这个速率是从我不拥有的服务(想想SOA,而不是DDD服务)中获取的。对于每种类型的流程,服务可能会有所不同,因为这些流程都构建了团队和服务,以支持它们保存我想要的数据。我如何在DDD中组织它

下面是一些代码来帮助解释:

class Process
{
    private final Rate rate;
    ...

    public Process( Rate rate )
    {
        this.rate = rate;
    }

    public Rate getRate()
    {
        return this.rate;
    }
    ...
}

class ProcessFactory
{
    public Process createProcess( ProcessSpecification spec );
}

class ProcessRepository
{
    public Process getProcessByName( String name );
}

如果ProcessSpecification包含一个描述调用速率的服务的速率规范,那么ProcessRepository是否应该负责知道如何从各种其他服务加载速率?

如果
过程
是一个聚合,聚合将用作一致性边界,那么它就不应该引用其他来源的数据。相反,您可以在创建
进程
时检索相应的
速率
值,并将其与聚合的其余部分一起保存

如果进程速率的更改超出了进程聚合的范围,那么您可能需要一个同步机制,该机制可以轮询来自服务的速率值,并相应地更新进程聚合。在这种情况下,速率值仍然与聚合的其余部分一起存储


此外,如果比率值仅用于显示目的,则它不应该是
过程的一部分
聚合,即使它在概念上是它的一部分。在这种情况下,只要在需要显示费率时调用服务即可。如果需要考虑性能,可以使用缓存。

谢谢。那么,我想利率也可以是一个总和。我的系统将跟踪从我的进程名到适当参数的映射,以提供给其他源。该映射是一个值对象,因为我将其与进程一起持久化。速率实际上没有标识符,但它对于我在请求中提供的参数和时间范围是唯一的(几乎与工厂类似,但工厂实现是远程的)。最后,我正在构建一个流程模型,该模型具有静态关系,其速率不断变化。关于您最后的评论,还有一个问题:如果我调用这样的服务,就DDD术语而言,该服务和由此产生的速率将扮演什么角色?是否现实与DDD中的角色/概念不匹配?我不认为我要求的是一个基于身份的速率,它更像是一个“给我这个时间跨度内处理的单元数”的问题,因此速率甚至没有被其他系统显式存储。经过一些实验和讨论后,接受这个,因为将速率移出
进程
聚合的想法非常有意义。需要时(创建和/或重建),费率由
RateService
检索。在我的系统上游,Rate将显示为一个值对象,但在我的系统中,我将它从另一个有界上下文转换为我自己的BC。