CQRS命令构造

Jef*_*eff 3 .net domain-driven-design cqrs

我有这样的CQRS命令

public sealed class RequestRoute
{
    public RequestRoute(string fromAddressName, double fromLatitude, double fromLongitude, string toAddressName, double toLatitude, double toLongitude, string userId)
    {
        UserId = userId;
        ToLongitude = toLongitude;
        ToLatitude = toLatitude;
        ToAddressName = toAddressName;
        FromLongitude = fromLongitude;
        FromLatitude = fromLatitude;
        FromAddressName = fromAddressName;
    }

    public string FromAddressName { get; private set; }
    public double FromLatitude { get; private set; }
    public double FromLongitude { get; private set; }

    public string ToAddressName { get; private set; }
    public double ToLatitude { get; private set; }
    public double ToLongitude { get; private set; }

    public string UserId { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)

我的程序员的直觉告诉我,我应该将FromXXX和ToXXX字段分解为一个名为"Address"的单独类...但我不确定是否违反了CQRS模式......我见过的所有例子都只使用原始类型作为命令和事件的属性.

Den*_*aub 7

命令是面向数据的,而不是面向对象的.它的属性应该主要是原始的.你没有在这里建模任何东西,只是发送平面数据.

使用自定义类型会强制您将类型发布到要使用命令的每个客户端.它还可以防止您将来更改这些类型而不会有任何麻烦.

然后就是可加性:自定义类型越少越简单.

在命令和事件之类的消息中,我尽可能地使用原语.复制不是问题,你需要低耦合,可串行化,改变容差.