我是否应该在C#/Java名称空间中输入主要版本号?
我正在设计一组“服务”层对象(数据对象和 WCF web服务(将被使用)的接口定义 由第三方客户(即非内部客户,因此不受我的直接控制) 我知道我是 没有得到完全正确的接口定义-而且 想为我知道我将不得不这样做的时候做准备 引入一组新的数据对象。然而,现实 我所处的世界是,我还需要运行我的第一个版本 同时进行了相当长的一段时间 我的服务的第一个版本的URL为 当时代来临时,新版本将在 然而,当涉及到数据对象和接口时,我 我在玩弄把“主要”版本的接口编号 进入类的实际名称空间我是否应该在C#/Java名称空间中输入主要版本号?,c#,web-services,oop,C#,Web Services,Oop,我正在设计一组“服务”层对象(数据对象和 WCF web服务(将被使用)的接口定义 由第三方客户(即非内部客户,因此不受我的直接控制) 我知道我是 没有得到完全正确的接口定义-而且 想为我知道我将不得不这样做的时候做准备 引入一组新的数据对象。然而,现实 我所处的世界是,我还需要运行我的第一个版本 同时进行了相当长的一段时间 我的服务的第一个版本的URL为 当时代来临时,新版本将在 然而,当涉及到数据对象和接口时,我 我在玩弄把“主要”版本的接口编号 进入类的实际名称空间 namespace
namespace Company.Product.V1
{
[DataContract(Namespace = "company-product-v1")]
public class Widget
{
[DataMember]
string widgetName;
}
public interface IFunction
{
Widget GetWidgetData(int code);
}
}
当服务发生根本性变化时,我将介绍
有些班级喜欢
namespace Company.Product.V2
{
[DataContract(Namespace = "company-product-v2")]
public class Widget
{
[DataMember]
int widgetCode;
[DataMember]
int widgetExpiry;
}
public interface IFunction
{
Widget GetWidgetData(int code);
}
}
在我看来,这样做的好处是我可以有一个单人房
为两个接口版本提供服务的代码集,共享功能
如果可能的话。这是因为我
将能够将两个接口版本作为一个不同的引用
C#对象集。类似地,客户端可以同时使用这两个接口
同时使用V1.Widget,在一些遗留版本中
代码,同时新位移到V2.Widget
谁能告诉我为什么这是一个愚蠢的想法?我有种唠叨的感觉
这有点臭
注:
很明显,我并不是在建议每一个新版本的服务
将位于新的命名空间中。想必我也会这么做
非中断接口会尽可能地更改,但我知道
将达到所有数据建模可能需要
重要的重写
我理解程序集版本控制等,但我认为这个问题是
与该类型的版本控制相切。但是我可能是错的。通常我看到(我自己也看到过)简单地调用版本2 Widget2、IWidget2等。如果你(可能)认为v2是最终结果,根据在野外看到v1的经验教训,这通常是好的。但是,如果你认为它更像是一个不断发展的东西,也许可以考虑一种更灵活的契约方法。我已经按照你的方式完成了(使用
V1
、V2
名称空间和通用名称空间),而且效果相当不错。基本上,我在Common
名称空间中实现了实际的代码,V1
,V2
等都只是作为它的包装器
在我们的例子中,旧版本通常会保留一段时间。通常,当客户请求访问我们的API时,我们会给他们“当前”版本,然后他们会永远使用这个版本——除非有一个严肃的商业案例需要迁移到新版本,否则他们几乎永远不会这样做