C# .Net核心版本控制:文件夹结构/名称空间

C# .Net核心版本控制:文件夹结构/名称空间,c#,.net,.net-core,asp.net-core-webapi,C#,.net,.net Core,Asp.net Core Webapi,我正在试图弄清楚.Net核心Web Api 2.0的版本控制,在看了很多“教程”之后,我有一些问题 例如,我有一个包含许多控制器/模型等的大型api 1。创建新版本的最佳方法是什么? 我见过有人把所有的控制器放在不同的文件夹中,/controllers/v1//controllers/v2/等等,模型也放在/models/v1/,models/v2等等 我见过将所有控制器版本放在同一个文件中,并使用属性指定哪个控制器属于哪个版本。(对我来说,这看起来很混乱,因为你忘记了哪些有多个版本,哪些没有

我正在试图弄清楚.Net核心Web Api 2.0的版本控制,在看了很多“教程”之后,我有一些问题

例如,我有一个包含许多控制器/模型等的大型api

1。创建新版本的最佳方法是什么?

  • 我见过有人把所有的控制器放在不同的文件夹中,
    /controllers/v1/
    /
    controllers/v2/
    等等,模型也放在
    /models/v1/
    models/v2
    等等
  • 我见过将所有控制器版本放在同一个文件中,并使用属性指定哪个控制器属于哪个版本。(对我来说,这看起来很混乱,因为你忘记了哪些有多个版本,哪些没有)
  • 我看到人们只是复制粘贴新版本文件夹中的几乎所有内容:
    /v1/controllers、/v1/models
    /v2/controllers、/v2/models
    。实际上,这只是将整个代码库克隆到一个新文件夹中。(我喜欢这一个,因为如果可以删除旧版本,只需删除整个文件夹即可)
2。如何处理命名空间更改?


例如,您有一个文件夹,其中包含
v1
和所有控制器、模型等,然后您希望将所有内容复制到
v2
以获得新版本。所有这些文件中的所有名称空间仍然包含
.v1
。如何将它们重命名为一个新的名称空间?

我已经看到几乎所有上述方法都可以很好地工作。但一如既往,这取决于许多因素。例如:

  • 有没有可能(在您的域中)在一段时间后停止支持以前的版本
  • 你对你的消费者有影响力吗?我是说你能强迫他们升级吗
  • 您能否将旧数据迁移到新数据(按需或通过单独的迁移步骤)
  • 您能否将旧的API使用者重新路由到新的API
  • 等等
这类问题可以帮助您确定哪个选项更可取

例如,如果以前的版本不能被弃用,因为您的API的外部使用者已经在维护中,并且没有简单的方法迁移他们的数据和重新路由他们的请求,那么文件级分离将更适合您。您在整个API级别(
v1/controller
)或概念级别(
controller/v1
)上这样做只是品味的问题。我个人更喜欢前者,因为它在代码组织方面提供了更多的灵活性。(它可以从一个版本发展到另一个版本)