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

时间:2013-02-08 09:43:28

标签: c# servicestack

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

  

实体:电影
  要求:电影
  回复:MovieResponse

所有操作都是如此。 Now this example:

  

实体:答案
  要求:答案
  回复:AnswerResult

Yet another:

  

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

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

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

2 个答案:

答案 0 :(得分: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支持)
  • / entities POST - AddEntitity
  • / entities / Id DELETE - DeleteEntity

混杂。约束指南:

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

1 不幸的是,BREAD似乎是一个边缘词。来自CRUD wikipedia article

  

CRUD的另一个变体是BREAD,“浏览,阅读,编辑,添加,删除”的首字母缩写。

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

答案 1 :(得分:4)

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

除了我的特殊情况,我会选择

实体:电影 要求:电影 回复:MovieResponse