在Microsoft Web API 2(REST,MVC)中对Model对象进行版本控制

时间:2014-03-19 18:25:48

标签: c# visual-studio-2013

我们有一个REST API已经使用" / v1 /"在控制器路线中,我们正计划创建一个" / v2 /"路径,并利用Web API 2.我能够找到很多关于版本控制器(属性路由,自定义解析器等)的信息,但有一件事我无法找到任何关于版本化你的模型对象(也称为数据传输对象)。人们如何对模型对象进行版本控制?

在我们的代码库和问题域中,控制器是简单的" (CRUD,真的)它是模型对象,它们编码我们的领域专业知识,并且我们的核心业务逻辑在其上运行。 (我怀疑这对许多应用程序来说都是如此,所以很奇怪大多数关于Web API 2和版本控制的网络文章都集中在控制器上,并忽略了对Model对象的关注,就好像他们会照顾好自己一样。 。)

在一个完美的世界中,我希望能够为两个API版本使用相同的类,并将属性放在属性上以包含或排除它们,例如"仅版本1和#34 ;,"仅版本2+","在版本2和#34;中弃用等等。我想我可以使用自定义序列化程序来实现这一点,该序列化程序查找我创建的属性类,但我想在我自己动手之前,知道是否有对它的内置支持或者它的开源库。

另一种可能的方法是从版本1模型类派生版本2模型类,但我只能添加这种方式而不能删除任何东西。我可以从基类派生版本1和版本2类,但是这些基于继承的方法中的任何一个都需要A)重构类的地方加上B)工厂模式,以便内部可以创建正确的派生类型。我想避免这种情况,但仍然更喜欢代码重复。

我想另一种方法是我们可以隐藏我们真实的模型对象并将它们的值复制到" dumb"接口处的数据传输对象。这种方法很简单,具有最大的灵活性,但也可以最大限度地发挥作用。

有没有我错过的选项?其他人使用什么方法?

0 个答案:

没有答案