How/where 在 CQRS 模式中创建一个 void 方法

How/where to create a void method in CQRS pattern

我正在尝试在干净的架构中实现 CQRS 模式。

我知道如果 commads/query 那么我需要在 applictionLayer 中添加一个名为 commads/query 的文件夹。

现在我想创建一个 void 方法。不是命令或查询,它只是一个无效的方法。我想在我的查询和命令中再次使用它。

public void FormatSomethingHtml(Something something)
{
  something.FinePrint = _helper.FormatHtml(something.FinePrint, something.SiteCode.Name);
  // removed rest      
}

我不知道应该在哪里创建这个方法。

如果我在 commandHandler 中创建这个方法,我就不能重用它。 即:

public class UpdateSomethingCommandHandler : IRequestHandler<UpdateSomethingCommand, Something>
{   
    // removed rest
    public void FormatSomethingHtml(Something something)
    {
        something.FinePrint = _helper.FormatHtml(something.FinePrint, something.SiteCode.Name);
        // removed rest      
    }
}

在上面的方法中,我可以在 UpdateSomethingCommandHandler 中使用。 但我无法在另一个处理程序中重用它。 IE。当我这样打电话时 new UpdateSomethingCommandHandler.FormatSomethingHtml(something); 我出错了。

哪里可以创建通用方法?

这应该是一个实用程序服务,并将其注入到您需要的任何 query/handler 中。

例如:

public interface IFormatService
{
void FormatSomethingHtml(Something something)
}

public class HtmlFormatService: IFormatService
{
public void FormatSomethingHtml(Something something)
{
  something.FinePrint = _helper.FormatHtml(something.FinePrint, something.SiteCode.Name);
  // removed rest      
}
}

在您的处理程序中,您可以将其注入并像使用任何其他服务一样使用它

此外,我会考虑将 return 类型更改为 Something,以便您可以更新对象和 return ot 或简单地接受字符串和 return 格式化字符串,如下所示:

public string FormatSomethingHtml(string something)
{
  return _helper.FormatHtml(something.FinePrint, something.SiteCode.Name);
}

在你的handler/query

var something = new Something();
something.Fingerprint = _formatter.FormatSomethingHtml(...)