5

在工作中,我们正在开发一个包含大量前端、后端和支持组件的大型应用程序。通常前端是用 C# 开发的,后端是用 Java 开发的,尽管后端的一部分也是用 C# 和可能后来的 C++ 开发的。

语言和平台的选择不是任意的;我们尝试权衡每个组件在开发时间、工具链成本、特定开发团队对语言的熟悉程度等方面的相对优点。但是,所有这些组件的共同点是,它们都是完整操作所必需的产品,并且它们是由独立的(但高度沟通的)团队同时开发的。

以前,我们使用 Team Foundation Server 编写 .NET 代码,使用 Subversion 编写 Java 代码;因为团队职责明确分离,除了将一个源代码树生成的二进制文件(在本例中为 WAR)放置在另一个源代码树中的不便以及保持分支和修订同步的高手动开销之外,这几乎没有造成什么问题。有了这个项目,团队之间的分离程度故意要小得多,分支/合并的数量预计会大大增加;因此,我们正在转向统一的 VCS,更具体地说是 Subversion。

这让我想到了问题的实质:如何有效地混合 Java 和 C# 代码?在实践中,我们将拥有依赖于 Java 代码库的 .NET 代码;Java 二进制文件需要运行除单元测试代码以外的任何东西(集成测试已经需要二进制文件,并且 QA、验收测试等当然也需要)。我们目前的想法是这样的:

/树干
    /java
        /组件1
        /组件2
        /图书馆1
        /图书馆2
    /网
        /组装1
        /组装2
        /...
        项目.sln

这个想法是将整个源代码树放在一个分支下;.NET 代码依赖于 Java 代码,因此我们将在解决方案中添加一个构建后步骤,这将(很可能)调用 Java 组件的 ant 脚本。这允许对整个代码库(对于 .NET 开发人员)或仅对 Java 组件(对于 Java 开发人员)进行分支。

这个解决方案的问题是:

  1. 当两个代码库中的一个变得如此之大以至于为每个分支复制它变得不切实际时会发生什么?(我们的想法:拆分为 .NET 和 Java 代码的单独存储库并使用 svn:externals,对此的任何输入将不胜感激)。
  2. 我们使用 Eclipse 进行 Java 开发。我们如何管理“共享”工作空间(即哪些项目需要哪些组件、依赖关系图等)?到目前为止,我们拥有的 Java 组件相对较少,因此每个开发人员都可以同时将所有这些组件保存在工作区中。随着 Java 组件和 Java 开发人员的增加,我看不出我们如何才能继续这样做。关于如何在保持两个代码库之间同步的同时保持工作区版本化(la 解决方案文件)的任何建议?

我很想听听你的意见!

4

1 回答 1

2

1:我发现最好按组件而不是语言来分组。如果一个组件需要多种语言的接口,您仍然需要将它们作为一个开发、测试和发布。因此,将一个组件拆分为多个存储库并不是一个好主意。

如果代码的一部分紧密依赖于另一部分,请将其放在一起。更好地跨 repos 拆分组件。(这甚至适用于内部结构,特别是随着事情的发展,如果你按类型而不是按功能打包东西是很困难的,即在 MVC 中,每个类别没有三个巨大的包,而是保留 FooView、FooModel 和FooController 紧。)

svn:externals 可能会起作用,并且我认为您可以使用更高版本的“内部”,即链接到同一仓库中的其他目录。这比管理单独的存储库要容易得多,尤其是在标记和分支方面。(不寒而栗)

2:您总是可以让开发人员设置不同的工作区,或者使用工作集。与 OS 变体相比,商业 Eclipse 版本对共享工作区设置的支持更好。(没有尝试过,只工作过并且对操作系统感到沮丧)

我已经在一个仓库中完成了 C++ (MSVS) 和 Java (Eclipse),而且效果很好。C++/Python 也类似。确保您的构建系统支持构建和测试所有内容(即使您的 IDE 只构建一个部分)。

于 2009-04-30T17:52:00.980 回答