CQRS命名约定

Ant*_*ott 9 naming-conventions cqrs

我正在实施一个新的Web服务,虽然我还没有使用CQRS,但我希望创建我的服务,以便将来可以很容易地转移到CQRS.所以,我想知道我的DTO类的命名约定以及我的方法.

我已经阅读了关于DTO命名约定的博客文章,这对我来说似乎很明智.它建议以下......

  • SomeSortOfQueryResult
  • SomeSortOfQueryParameter
  • SomeSortOfCommand
  • SomeSortOfConfigItem
  • SomeSortOfSpecification
  • SomeSortOfRow
  • SomeSortOfItem(用于集合)
  • SomeSortOfEvent
  • SomeSortOfElement
  • SomeSortOfMessage

我在这里要问的是我应该如何命名我的方法.使用GetSomethingSomeQuery更好是好的做法吗?

Nei*_*ell 11

命名应该真正来自方法正在做的事情.退后一步,首先查看命令查询分离(CQS).你真正想在这里做的是确保任何给定的方法或者查询数据或命令的东西发生.

"要求价值不应改变价值".

CQRS在更大范围内是不同的,并且通常不太了解.但是,它不一定很复杂,只是在架构级而不是代码级应用CQS概念.例如,您可以为命令选择WCF,为查询选择原始SQL.它旨在让您自由地使您的查询成为最简单的事情,而您的命令仍然可以获得丰富的完整域模型或其他适合您的业务规则的实现.

CQRS还可以引导您远离CRUD应用程序,转向基于任务的应用程序,您可以在用户交互方面更多地关注问题域,而不仅仅是阅读和保存数据.

查询

通常我将"查询"的名称命名为FindXYZ(),GetXYZ()或者LoadXYZ,只要意图明确(即返回一些数据,不要修改任何数据).

命令

通常,命令更难命名,但您可以用与PowerShell的cmdlet命名约定类似的术语来思考 - verb-noun.就个人而言,我倾向于将命令实现为CommandProcessor模式,其中命令实际上是包含参数的对象(有时只是实体的主键).有代码为每个命令寻找合适的"处理器" Type.通常在CQRS中,您可以尝试保持同步,因为异步意味着您在处理无法处理的命令方面需要做更多的工作,但如果您确实需要一个异步命令,那么您的命令处理程序可能会发送一个发送给ESB的消息.

  • 几年前我和一个团队一起工作的一个惯例就是`GetThing()`方法不能返回`null`(它们可能抛出异常)而`FindThing()`*可能*返回null如果找不到东西. (7认同)