我无法理解我将如何支持 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)