首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >CQRS命令构造

CQRS命令构造
EN

Stack Overflow用户
提问于 2013-04-09 08:06:11
回答 6查看 709关注 0票数 3

我有一个CQRS命令,如下所示

代码语言:javascript
运行
复制
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; }
}

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

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-04-09 17:48:48

在我看来,这样的重构没有真正的价值。

编写route.ToLatituderoute.To.Latitude在可读性和维护过程中都不会改变任何东西。

但是,我会将double 字段更改为decimal (甚至是to字符串),以避免在不同平台、机器或体系结构之间移动DTO序列化(无论是二进制还是非二进制)时出现任何问题。

票数 3
EN

Stack Overflow用户

发布于 2013-04-09 19:28:15

命令是面向数据的,而不是面向对象的。它的属性应该主要是基本类型。您在这里没有对任何东西进行建模,只是在到处发送平面数据。

使用自定义类型会强制您将类型发布到每个想要使用命令的客户端。它还将阻止您在将来更改这些类型,而不会遇到一些麻烦。

然后是可序列化:自定义类型越少越简单。

在像命令和事件这样的消息中,我会尽可能使用原语。这里不是复制的问题,你想要低耦合,可序列化,改变容错。

票数 7
EN

Stack Overflow用户

发布于 2013-04-09 10:45:35

就模式而言,在那里提取一个通用类型似乎很好。总体考虑是,命令一旦发出就不应该更改,因此只需确保address类型是不可变的(就像原始类型一样)。

可能需要考虑一些实现约束,即序列化。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15891143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档