我正在与我的团队一起处理我们工作的“核心”域,我们有几个 DB、Web 服务、导入器等……我们通过后端 WCF Web 服务向其他团队公开域服务。这个 web 服务被分成几个 api(或区域)。我们将其部署在多个生产服务器(~ 80)(1 个服务器 <-> 1 个客户)上。
问题是:一些 api 公开,我们必须在许多版本中保持相同的合同。其他团队想要更大的灵活性(3 个内部 api 合同版本),因为他们无法遵循我们的交付率(更长的周期)
实际上,我们只是将其作为一个整体来服务,并且我们使用的是经典的三分支分支 (DEV/MAIN/RELEASE'n')
我正在尝试升级我的 TFS 团队集合组织以处理每个 API 版本的定义版本范围:
- API Foo v2 (hxxp://-host-/api/foo/v2/...)
- API Foo v3 (hxxp://-host-/api/foo/v3/...)
- API 栏 v1 (hxxp://-host-/api/bar/v1/...)
- API Bar v2 (hxxp://-host-/api/bar/v2/...)
目前我们有以下分支模式:
$\MyTeamCollection
|___\DEV {Branch}
|___\Databases
|___\MyDBProj (SSDT)
|___\Documents
|___\MyWebService\MyWebSvc.Usage.docx
|___\Projects
|___\MyWebService.Core
|___\MyWebService.API.Bar
|___\MyWebService.API.Foo
|___\Shared
|___\MyDB\MyDB.DacPac, etc...
|___\MyWebService\MyWebsvc.Bar.Contract.Dll <-- WCF DataContract/ServiceContract
|___\MyWebService\MyWebsvc.Foo.Contract.Dll
|___\MAIN {Branch} <-- This one is what is on the integration server
|___\R1 {Branch} <-- This one went on a production server and is kept aside
|___\R2 {Branch}
|___\Archive
|___\R0 {Branch} <-- This one is obsolete but is archived here
实际上它处理一组单一的 api 版本控制。=> 每个版本都附带一组最新的 api 版本(Foo、Bar)
我的问题是如何改进它以在每个版本中处理多个 Api 版本(Foo-v1、Foo-v2、bar-v3、bar-v4)我应该在分支内创建分支吗?这不会是一场噩梦吗?你身边有任何实际的工作团队收集组织吗?
谢谢,-杰里米。
一些补充:
我所有的客户都是 .Net,我们为他们提供了名为 MyWebsvc.Foo.Contract.Dll 的程序集。该程序集包含:
ServiceContract 接口,由代理模式实现
[ServiceContract]
public interface IFooService {
Foo Get(int Id);
}
并且需要所有数据合约(DTO + 序列化)
[DataContract]
public class Foo {
// ...
}
在 Web 服务端有实际的实现
public class FooServiceImpl : FooApi.IFooService { ... }