domain-driven-design - 什么型号名称应该加上前缀
问题描述
我的类型命名有问题,通常它适用于我的所有项目。
我正在使用 CQRS,并且很多时候我的应用程序的不同层都引用了类似的数据“上下文”。例如,我有一个 Player 上下文,它分布在查询模型、写入模型、域模型等中。
基本上我的问题是,如果某些类/结构/数据类型专门指的是“查询”类型,我应该将其命名为 PlayerQuery 还是 QueryPlayer。
据我了解,“PlayerQuery”暗示它是对玩家数据的查询,另一方面,“QueryPlayer”暗示某种“查询”行为。
我开始编码已经有一段时间了,但我仍然在努力正确命名事物。
感觉“PlayerQuery”在这里是更好的方法。是否有任何书籍或在线资源可以解决这个问题?非常感谢
解决方案
我开始编码已经有一段时间了,但我仍然在努力正确命名事物。
在这里相关的一个很好的报价:
计算机科学中只有两个难点:缓存失效和命名。
——菲尔·卡尔顿
你遇到这个问题是因为你试图用一种CRUD
心态来解决这个问题,而 CQRS(或 CQS)提倡专注于实际的交互。即使应用程序的不同部分共享播放器上下文,使用它的原因也会有所不同。
例如,您将:
- 查询分页玩家列表
- 询问单个玩家的详细信息
- 保存单个玩家的数据
- 批量更新多个玩家详细信息中的属性
在每个交互中,您应该将交互本身作为提示来命名 Query/Command/DTO 对象。
所以数据类名称可以是:
- 球员名单
- PlayerDetailForQuery
- PlayerDetailForSave
- PlayerDetailsForBulkUpdate
一个改进是为每个类名加上对象类型的后缀:
- 玩家列表参数
- 球员名单结果
- 播放器行(或)播放器物品(或)播放器详细信息
- 玩家事件
- 播放器规格
最好的实现是将交互与对象类型结合起来:
- FetchPlayerList参数
- FetchPlayerList结果
- 获取播放器详细信息
- BulkUpdatePlayer参数
- 保存播放器命令
- PlayerSaved事件
最重要的是,一旦您选择了约定(例如Detail而不是Item或Row),请在整个代码中保持一致。
推荐阅读
- django-rest-framework - 我对注册人的序列化程序有疑问
- android - 如何制作通用文本大小以在 Android 中显示?
- sql-server - 是否需要从字符串转换为十进制,如果需要,应该如何完成?
- flutter - 如何从 Flutter 应用程序在 Instagram 提要上发布链接?
- html - 使用 after 伪选择器显示图标
- html - 从 html 的基本文本中剪切粘贴元素
- node.js - 如何将基本身份验证标头添加到表单
- python - Python:从 csv 解析未命名的列
- raft - 筏子追随者是否应该在收到更高期限的投票请求时更新期限?
- cmake - Android cmake子目录依赖api 21