型号名称应以什么为前缀

What model names should be prefixed with

我的类型命名有问题,通常它适用于我的所有项目。

我正在使用 CQRS,很多时候我的应用程序的不同层都引用相似的 'context' 数据。 例如,我有一个 Player 上下文,它分布在查询模型、写入模型、领域模型等中。

基本上我的问题是,如果某些 class/struct/data 类型具体指的是 'Query' 类型,我应该将其命名为 PlayerQuery 还是 QueryPlayer。

根据我的理解,'PlayerQuery' 暗示它是对玩家数据的查询,另一方面 'QueryPlayer' 暗示某种 'Query' 行为。

我开始编码已经有一段时间了,但我仍在为正确命名事物而苦苦挣扎。

感觉 'PlayerQuery' 是更好的方法。 是否有任何书籍或在线资源可以解决这个问题? 非常感谢

It has been quite a while when i started coding but i still struggle with properly naming things.

与此处相关的精彩引语:

There are only two hard things in Computer Science: cache invalidation and naming things.

-- Phil Karlton

你遇到这个问题是因为你试图以 CRUD 的心态来解决这个问题,而 CQRS(或 CQS)提倡关注实际的交互。即使应用程序的不同部分共享播放器上下文,使用它的原因也会不同。

例如,您将是:

  • 查询分页玩家列表
  • 询问单个玩家的详细信息
  • 保存单个玩家的数据
  • Bulk-updating多个玩家详细信息中的一个属性

在这些交互中的每一个中,您都应该以交互本身为线索来命名 Query/Command/DTO 对象。

因此数据 class 名称可以是:

  • 玩家列表
  • PlayerDetailForQuery
  • PlayerDetailForSave
  • PlayerDetailsForBulkUpdate

一个改进是为每个 class 名称加上对象类型的后缀:

  • 玩家列表参数
  • 玩家列表结果
  • PlayerRow (or) PlayerItem (or) PlayerDetail
  • 玩家事件
  • 播放器规格

最好的实现方式是将交互与对象类型结合起来:

  • FetchPlayerListParams
  • FetchPlayerList结果
  • GetPlayer详情
  • 批量更新播放器参数
  • 保存播放器命令
  • PlayerSavedEvent

最重要的是,一旦您选择了约定(例如 Detail 而不是 ItemRow), 在整个代码中使用一致。