gpt4 book ai didi

c# - 在 MVC Controller 中使用命令查询分离原则

转载 作者:太空狗 更新时间:2023-10-29 21:06:03 26 4
gpt4 key购买 nike

我喜欢 Command Query Separation 的想法但看不到如何在添加实体的 MVC Controller 操作中使用它,并且在添加后需要新实体的 ID。

例如,在下面的简化示例中,服务用于创建新项目:

public ActionResult Assign(AssignViewModel viewModel)
{
var newItem = _AssignItemService.AssignItem(viewModel.ItemName, viewModel.ItemValue);

return RedirectToAction("ListItem", new {id = newItem.Id);
}

但是当我重定向到要显示新项目的操作时,我需要知道新创建项目的 ID,以便可以从数据库中检索它。所以我必须要求服务返回新创建的项目(或者至少,它的 ID)。

在纯 CQS 中,命令没有返回值,因此上述模式无效。

非常感谢收到的任何建议。

最佳答案

我认为你被困在了一个迂腐的观点上。

查询是指您想向数据库询问一个问题,例如“密西西比河以西有多少客户在 6 月份购买了红色商品?”这就是查询。在插入期间返回 ID 本身并不是典型的查询。

与软件开发中的大多数其他事物一样,这种模式不是绝对的。即使是 Fowler 也表示他愿意在方便的时候打破它:

Popping a stack is a good example of a modifier that modifies state. Meyer correctly says that you can avoid having this method, but it is a useful idiom. So I prefer to follow this principle when I can, but I'm prepared to break it to get my pop.

如果你真的想从数据库中检索最近添加的 ID 与其插入分开,你可以使用类似 Scope Identity 的东西.但我认为您是在增加复杂性而没有获得额外好处。

关于c# - 在 MVC Controller 中使用命令查询分离原则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10433769/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com