2

我正在开发一个系统来为流程建模。Process 的一个属性是它的速率。我认为 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 是否应该负责知道如何从各种其他服务加载费率?

4

1 回答 1

1

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

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

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

于 2013-03-19T17:34:37.283 回答