gpt4 book ai didi

.net - 对 CQRS 重复自己的规则很重要

转载 作者:行者123 更新时间:2023-12-01 04:57:52 26 4
gpt4 key购买 nike

我想知道在 CQRS 上使用名为 DRY(Do not repeat yourself) 的设计原则规则。

我有两种类型的几何表,名为 WaterPipes、GasPipes。

public GasPipe{ id, Name, Length, .... }
public WaterPipe{ id, Name, Length .... }

所以我不熟悉使用 CQRS。我想创建一个查询来获取它们的总长度。

数据库查询会类似。

Select Sum(Length) From GasPipes, 
Select Sum(Length) From WaterPipes

那么现在我可以创建一个查询吗?

public class PipeLengthQuery { }
public class PipeLengthQueryHandler {
if(water) Select Sum(Length) From WaterPipes
if(gaz) Select Sum(Length) From GasPipes
}

或单独的查询类型:

public class WaterPipeLengthQuery { }
public class GasPipeLengthQuery { }
public class GasPipeLengthQueryHandler { }
public class WaterPipeLengthQueryHandler { }

哪个最好?

最佳答案

好吧,如果单独的查询类型会导致类的激增,我想您可以尝试找到一种更通用的方法。

很难准确地告诉您应该如何完成,但是在查询处理程序中使用 if 语句可能是不正确的。它违反了 Open-closed principle如果您要引入新的查询,例如 PipeDiameterQuery,将会导致大量的代码重复。

您可以做的是拥有一个类,该类封装每种类型管道的统计读取模型的实际模式,并让您的查询处理程序处理这些模式。

客户端将传递他想要统计的管道类型,查询处理程序可能看起来像(伪代码):

schema = PipeStatisticalSchema.fromPipeType(clientSuppliedPipeType);

SELECT SUM(Length) FROM schema.Table

最好,如果 schema 在到达查询处理程序之前就已经被解析,那么它就被注入(inject)其中。

关于.net - 对 CQRS 重复自己的规则很重要,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28871756/

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