5

職場では、かなりの数のフロントエンド、バックエンド、およびサポート コンポーネントを含む大規模なアプリケーションを開発しています。通常、フロントエンドは C# で開発され、バックエンドは Java で開発されますが、バックエンドの一部は C# で開発され、その後 C++ で開発されることもあります。

言語とプラットフォームの選択は任意ではありません。私たちは、開発時間、ツールチェーンのコスト、特定の開発チームによる言語への習熟度など、それぞれの相対的なメリットを比較検討しようとしています。ただし、これらすべてのコンポーネントに共通しているのは、それらがすべて完全な操作に必要であるということです。製品であり、独立した (しかし非常にコミュニケーションの取れた) チームによって同時に開発されていること。

以前は、.NET コードに Team Foundation Server を使用し、Java コードに Subversion を使用していました。チームの責任が明確に分離されていたため、あるソース ツリーから生成されたバイナリ (この場合は WAR) を別のソース ツリーに配置する不便さと、ブランチとリビジョンの同期を維持するための高い手動オーバーヘッド以外の問題はほとんどありませんでした。このプロジェクトでは、チーム間の分離の程度は意図的に非常に小さくなり、分岐/マージの量はかなり多くなることが予想されます。その結果、統合された VCS、より具体的には Subversion に移行しています。

これが問題の本質につながります。Java と C# のコードを効果的に混在させるにはどうすればよいでしょうか。実際には、Java コードベースに依存する .NET コードを使用します。Java バイナリは、単体テスト コード以外のものを実行するために必要です (統合テストには既にバイナリが必要であり、QA、受け入れテストなどにも確かに必要です)。現在考えていることは次のようなものです。

/トランク
    /java
        /コンポーネント1
        /コンポーネント2
        /ライブラリ1
        /ライブラリ2
    /ネット
        /アセンブリ1
        /アセンブリ2
        /...
        プロジェクト.sln

ソース ツリー全体が 1 つのブランチの下に配置されるという考え方です。.NET コードは Java コードに依存しているため、(ほとんどの場合) Java コンポーネントの ant スクリプトを呼び出すビルド後の手順をソリューションに追加します。これにより、コードベース全体 (.NET 開発者の場合) または Java コンポーネントのみ (Java 開発者の場合) の分岐が可能になります。

このソリューションの問題点は次のとおりです。

  1. 2 つのコードベースのいずれかが非常に大きくなり、ブランチごとにコピーを作成することが現実的ではなくなった場合はどうなりますか? (私たちの考え: 分割して .NET と Java コードのリポジトリを分離し、svn:externals を使用します。これに関する意見をいただければ幸いです)。
  2. Java開発にはEclipseを使用しています。「共有」ワークスペースをどのように管理しますか (つまり、どのコンポーネントにどのプロジェクトが必要か、依存関係グラフなど)? これまで、Java コンポーネントは比較的少なかったので、各開発者はそれらすべてを同時にワークスペースに保持することができました。Java コンポーネントと Java 開発者の増加に伴い、どうすればそれを続けられるかわかりません。2 つのコードベース間の同期を維持しながら、ワークスペースのバージョン管理 (ソリューション ファイルのようなもの) を維持する方法について何か提案はありますか?

ご意見をお待ちしております。

4

1 に答える 1

2

1: 言語ではなく、コンポーネントごとにグループ化するのが最善であることがわかりました。1 つのコンポーネントのインターフェイスに複数の言語が必要な場合でも、それらを 1 つとして開発、テスト、およびリリースする必要があります。そのため、コンポーネントを複数のリポジトリに分割することはお勧めできません。

コードの一部が他の部分に密接に依存している場合は、まとめて保管してください。リポジトリ間でコンポーネントを分割することをお勧めします。(これは内部構造にも当てはまります。特に物事が成長するにつれて、機能ごとではなく型ごとにパッケージ化する場合、つまり MVC では、各カテゴリに 3 つの巨大なパッケージを持たず、FooView、FooModel、およびFooController タイト。)

svn:externals が機能する可能性があります。後のバージョンでは、「内部」、つまり同じレポ内の他のディレクトリへのリンクを使用できると思います。これは、特にタグ付けと分岐を使用して、個別のリポジトリを管理するよりもはるかに簡単です。(身震い)

2: 常に開発者に異なるワークスペースをセットアップしてもらうか、ワーキング セットを使用することができます。商用の Eclipse リリースでは、ワークスペース設定の共有が OS バリアントよりも優れています。(試したことはなく、動作しただけで、OSのものに不満を感じていました)

私は C++ (MSVS) と Java (Eclipse) を 1 つのレポで実行しましたが、かなりうまく機能します。C++/Python も同様です。ビルド システムがすべてのビルドとテストをサポートしていることを確認してください (IDE が 1 つの部分のみをビルドする場合でも)。

于 2009-04-30T17:52:00.980 に答える