小编Jos*_* P.的帖子

CQRS 写入端 DDD 中的时间序列/时间数据

我无法理解我将如何支持 DDD 中的时间序列/时间数据以及如何使用 CQRS 在写入端处理它。最终,我想找到一个也能很好地处理事件溯源的解决方案。

以温度预测为例,温度的变化也可能影响一个地区/位置的预测能源需求。假设温度预测可以持续很长时间(基于历史数据),将所有预测加载到Location聚合中我认为如果不对加载的数据量施加一些限制是不切实际的。

在牢记事件溯源时,同步/存储此类数据的好/推荐方法是什么,以便在 CQRS 的写入端使用?

我下面的任何尝试(选项 A 或 B)是否被视为合适的 DDD/CQRS 解决方案?

选项A:

允许独立更新温度并使用流程管理器/传奇订阅事件,然后重新计算需求。此解决方案将有助于保持较小的聚合大小,但是感觉聚合边界可能是错误的,因为需求取决于温度并且现在分布在命令/事件中。

// OverrideTemperatureForecastCommandHandler.cs 
public void Handle(OverrideTemperatureForecast cmd)
{
    var from = cmd.TemperatureOverrides.Min(t => t.DateTime);
    var to = cmd.TemperatureOverrides.Max(t => t.DateTime);

    TemperatureForecasts forecasts = temperatureForecastRepository.GetByLocation(cmd.LocationId, from, to);

    forecasts.Override(cmd.TemperatureOverrides);

    temperatureForecastRepository.Save(forecasts);
    // raises 
    // TemperatureForecastsOverridden(locationId, overrides)
}

// TemperatureForecastsOverriddenProcessManager.cs 
public void Handle(TemperatureForecastsOverridden @event)
{
    var from = cmd.TemperatureOverrides.Min(t => t.DateTime);
    var to = cmd.TemperatureOverrides.Max(t => t.DateTime);

    // issue a command to recalculate the energy demand …
Run Code Online (Sandbox Code Playgroud)

c# domain-driven-design time-series cqrs event-sourcing

5
推荐指数
1
解决办法
1009
查看次数