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

时间:2013-03-19 17:00:19

标签: domain-driven-design soa

我正在研究一个为流程建模的系统。该过程的一个特性是其费率。我认为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包含描述要为费率调用哪个服务的RateSpecification,那么ProcessRepository是否应该负责知道如何从各种其他服务加载费率?

1 个答案:

答案 0 :(得分:1)

如果Process是聚合,并且聚合用作一致性边界,则它不应引用其他来源的数据。相反,您可以在创建Rate时检索相应的Process值,并将其与聚合的其余部分一起保留。

如果进程的速率在Process聚合的范围之外发生变化,那么您可能需要一种同步机制来轮询服务中的速率值并相应地更新Process聚合。在这种情况下,费率值仍然与聚合的其余部分一起存储。

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