我正在研究一个为流程建模的系统。该过程的一个特性是其费率。我认为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是否应该负责知道如何从各种其他服务加载费率?
答案 0 :(得分:1)
如果Process
是聚合,并且聚合用作一致性边界,则它不应引用其他来源的数据。相反,您可以在创建Rate
时检索相应的Process
值,并将其与聚合的其余部分一起保留。
如果进程的速率在Process聚合的范围之外发生变化,那么您可能需要一种同步机制来轮询服务中的速率值并相应地更新Process聚合。在这种情况下,费率值仍然与聚合的其余部分一起存储。
此外,如果费率值仅用于显示目的,那么它不应该是Process
聚合的一部分,即使它在概念上是其中的一部分。在这种情况下,只需在需要显示费率时调用服务即可。如果考虑性能,可以使用缓存。