我应该在Service Stack服务模型中使用什么命名约定?

Gie*_*ius 8 c# servicestack

我们正考虑在下一个项目中使用ServiceStack; 在看示例时,我注意到,没有通用的命名约定. 例如:

entity:电影
请求:电影
回复:MovieResponse

所有操作都是如此. 现在这个例子:

实体:答案
请求:答案
响应:AnswerResult

完后还有:

实体:用户?
请求:GetUsers
响应:GetUsersResponse

(看到用动词盯着的班级名字有点奇怪)

所以,你可能想出了一些聪明的命名约定并希望分享.此外,服务堆栈上是否有更大的开源项目,我可以看看他们如何组织他们的服务模型?

小智 11

我使用BREAD 1和Verb-Entity以下样式:

命名空间是"实体",然后:

  • BrowseEntities
  • BrowseEntitiesResponse
  • BrowseEntitiesService
  • AddEntity
  • AddEntityResponse
  • AddEntityService

请注意,表单实际上是[动词] [实体] [角色].

  • 动词:浏览,阅读,编辑,添加,删除(BREAD),验证,提取(例如其他操作)

  • 实体:这是复数或单数,取决于受影响/检索实体的正常数量.(我并不完全不认为像DeleteEntity这样的服务可能会一次删除多个实体,但如果放入"单数"-name DTO /服务,应该仔细考虑.它可以始终遵循复数DeleteEntities.)

  • 角色:(没什么)=请求DTO,响应=响应DTO,服务=服务.

  • 命名空间:始终为复数.这避免了与实体(单数)等DAL类的冲突.

对于BREAD绑定(端点总是复数,它表示一个集合):

  • / entities GET - BrowseEntities
  • / entities/Id GET - ReadEntitiy
  • / entities/Id POST - EditEntity(未在PUT上出售;尚未查看PATCH支持)
  • /实体POST - AddEntitity
  • / entities/Id DELETE - DeleteEntity

杂项.约束指南:

  • / entities/Id/verb POST/GET - VerbEntity(即ValidateEntity),仅在幂等时才进行GET.
  • / entities/_/verb POST/GET - VerbEntitiy,适用于没有用它标识资源的任意(但特定)实体.这种情况很少见,但在验证尚未保存的实体等情况下使用.它允许图案保持一致.
  • / entities/verb POST/GET - VerbEntities,适用于集合,但不适用于任何特定资源.
  • / entities/Id/items/.. - 与具有给定Id的实体相关的子/相关端点.遵循先前讨论的相同模式.

1不幸的是,BREAD似乎是一个边缘词.来自CRUD维基百科的文章:

CRUD的另一种变体是BREAD,它是"浏览,读取,编辑,添加,删除"的首字母缩写.

我更喜欢它的声音,它有一个单独的Browse动作.


小智 4

我目前使用第三个选项,其中请求以动词开头。原因是我的实现并不完全基于典型的 REST 样式 url,并且我广泛使用 C# 客户端。在这种情况下,动词只是有助于清楚地识别服务的目的。

除了我的特定场景之外,我会选择

实体:电影请求:电影响应:MovieResponse