繁体   English   中英

EF 中具有多个实体的 CQRS

[英]CQRS with multiple entities in EF

我有以下情况:

一个 State 实体是根,它包含多个参数,最重要的是 URL 和 ID。 然后我有 3 个实体可以选择连接到 State,但总是必须有 1 个,而且只能是 1 个。

将消息(实体)发送到命令时。 我应该为每个选项制作 3 个不同的命令(这对我来说似乎最有可能),还是应该发送所有实体,即使有些实体可能是空的并在命令中弄清楚? 或者是否有另一种/更好的方法来处理这个问题。 因为我习惯在 1 条消息中包含所有数据,但我现在不能拥有。

CQRS 并没有规定您应该如何划分命令(或查询)的逻辑。 没有什么本质上表明您必须将此创建逻辑分成几个单独的创建命令。

可以在 BLL 或 DAL 上实现 CQRS。 这会影响首选方法。 你没有具体说明,所以我无法判断。

一般来说,在 BLL 上使用 CQRS 时,我将 scope 我的命令发送到单个事务。 如果您需要 State 及其依赖项(在您的情况下听起来很可能)之间的事务安全,请坚持使用单个命令。
如果您不需要事务安全,例如,如果您可以将依赖项的创建推迟到稍后阶段,则将这两个命令分开。

请注意,即使使用单个命令,您仍然可以将每个实体的创建逻辑抽象为例如它们自己的存储库方法,这些方法将由命令处理程序(通过其注入的依赖项)调用。 这很好。 您不需要通过单独的命令进行路由。

如果您的 CQRS 在 DAL 上实现,但 BLL 管理事务(或者您没有事务),您可以创建单独的 DAL 命令,BLL 服务将在需要时触发这些命令。 然而,用可能是空的信息盲目地触发这些命令是没有意义的,这意味着什么都不应该做。 仅当您知道需要执行命令时才触发命令。 BLL 服务应该检查是否需要创建依赖实体,然后才应该触发相应的命令。

在所有情况下,应为 State 实体仅创建一个依赖项这一事实是业务逻辑,这应在 BLL 上实现。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM