哪些型号名称应前缀

时间:2019-06-17 15:02:25

标签: domain-driven-design cqrs naming

我在命名类型时遇到问题,通常适用于我的所有项目。

我正在使用CQRS,并且很多时候我在应用程序的不同层中引用相似的数据“上下文”。 例如,我有一个播放器上下文,遍及查询模型,写入模型,域模型等。

基本上我的问题是,如果某些类/结构/数据类型专门引用“查询”类型,我应该将其命名为PlayerQuery还是QueryPlayer。

根据我的理解,“ PlayerQuery”表示它是对玩家数据的查询,而“ QueryPlayer”则表示某种“查询”行为。

我开始编码已经有一段时间了,但是我仍然无法正确地命名事物。

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

1 个答案:

答案 0 :(得分:1)

  

开始编码已经有一段时间了,但是我仍然无法正确地命名事物。

与此处相关的好报价quote:

  

计算机科学中只有两件难事:缓存无效   并命名事物。

     

-菲尔·卡尔顿

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

作为示例,您将成为:

  • 查询分页的球员列表
  • 询问单个玩家的详细信息
  • 保存个人玩家的数据
  • 批量更新多个玩家详细信息中的属性

在每种交互中,您都应将交互本身作为提示来命名Query / Command / DTO对象。

因此数据类名称可以是:

  • PlayersList
  • PlayerDetailForQuery
  • PlayerDetailForSave
  • PlayerDetailsForBulkUpdate

一个改进将是在每个类名后加上对象类型:

  • PlayersList 参数
  • PlayersList 结果
  • 玩家(或)播放器项目(或)播放器详细信息
  • 玩家事件
  • 播放器规格

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

  • FetchPlayerList 参数
  • FetchPlayerList 结果
  • GetPlayer 详细信息
  • BulkUpdatePlayer 参数
  • SavePlayer 命令
  • PlayerSaved 事件

最重要的是,一旦选择了约定(如 Detail 而不是 Item Row ),就必须保持一致的用法整个代码。