verb + noun 是一个合理的模板。如果特定的演员很重要,那么我喜欢使用verb + noun + actor 之类的约定,例如PublishArticleAsAuthorJob,但是这只有在哪个演员负责这项工作的区别很重要时才有用。例如,我可能期望如果还有PublishArticleAsAdminJob 或者将来可能会出现。此外,我重命名了很多东西,所以我最有可能将其命名为 PublishArticleJob,然后如果我稍后创建 PublishArticleAsAdminJob,我会将现有的重命名为 PublishArticleAsAuthorJob。
我也倾向于按照层次结构对单词进行排序,所以它可能是resource + verb。因此,当我扫描按字母顺序排列的文件/模块列表时,我可以快速看到列表中彼此相邻的相关项目,例如 ArticlePublishJob 和 ArticleCreateJob。
我喜欢将我的动词保持在一个有限的集合中,例如Build(实例化而不持久化)Create(实例化和持久化)、Save(保存在其他地方构建的实例)、Find(在本地数据库、文件系统或数据结构中查找),Fetch(如果存在则返回,否则生成或获取,确保下次立即存在并返回)。
像Publish 这样的非标准动词应该对应于相关资源上定义的转换,所以我希望Article 模型上有一个publish! 方法。如果Article 模型本身不知道如何publish,并且例如发布包括在已发布文章列表中创建记录,那么工作将类似于CreatePublishingEntryJob(publishing_entries 是一个尴尬需要更多思考的资源名称,但此处无关紧要),这让我回到了标准动词领域。
我不能在这里声称我的约定是“正确的”,但这些细节旨在提供一些想法。有限动词集的想法来自研究 REST 架构,我可能会向/publish_article_jobs 发送一个 POST,而不是对 /article/:id/publish 的 PATCH,因为我实际操作的资源不是文章,而是工作。
另一个将非标准动词变成标准动词的例子是将tag an article在相应的路由、控制器、作业等中替换为create a tagging。
再一次,只是一组想法。不在这里声称“正确”状态。
我命名的一般经验法则是:如果我可以为一个事物想出两个或多个可能的名称,我应该继续考虑那个命名,直到它只有一个可能的名称。这很好,因为稍后如果我需要一个东西,并且我使用相同的命名过程来解析为一个可能的名称,我可以将生成的文件名输入到我的编辑器的文件打开器中,瞧,文件就在那里。即使我在五年前编写了代码,我也会想“我想知道我是否有一个 ...create_tagging_job.rb 并且该文件的存在为我回答了这个问题。