大規模なJavaプロジェクトがあり、ビルドサイクルにmavenを使用しています。この1つのプロジェクトは広く使用されています-他のプロジェクト、さまざまなアプリケーション、その中に含まれているものと他の場所にあるもの...正直に言うと、それはちょっとした混乱です目的)、そして私はそれを少しきれいにしたいと思います。また、完全にはテストされていません(適切なユニットおよび統合テストなしで多くのビットが追加されています)。実行に時間がかかるか、実際に合格しないテストがいくつかあります...(uh-oh)-そうテストはMavenビルドサイクルでオフに切り替えられます(繰り返しますが)。
「最終」サブプロジェクト(または複数のサブプロジェクト)が必要とするさまざまなサブプロジェクトを選択できるように、この大きなプロジェクトを小さな特定のプロジェクトに分割することを考えています。
私の考えは次のとおりです。
- 大きなプロジェクトをさまざまなサブプロジェクトに分けると、各プロジェクトの責任が明確になります。
- サブプロジェクトに分けることで、各サブプロジェクトのテストを個別にクリーンアップし、Mavenビルドサイクルでそのサブプロジェクトのテストを有効にできます。
これがビルド時間に与える影響について少し懸念しています。
- 大きなプロジェクトに構造を課す(つまり、小さなサブプロジェクトに入れる)と、コンパイラの速度が低下しますか?
また、IDEでの編集時間にどのような影響があるかも少し懸念しています(主にIntellijを使用しています)。Intellijは依存関係ツリーを介して各プロジェクトを順番にビルドするようです。つまり、CがBに依存し、Aに依存し、Aを変更すると、Aがコンパイルしない限りBをビルドしようとしません。おそらくそれは有利ですが、たとえば、BおよびCで広く使用されているAのインターフェイスを変更すると、その変更によるすべてのエラーを修正するのに時間がかかることがわかりました...
もう1つの質問は、ファクトリクラスの使用方法です。プロジェクトの一部の側面は外部jarに依存しています。時折(ありがたいことに頻繁に)これらは更新され、移行する必要があります。外部コードの正しいバージョンを指すFactoryクラスを使用してこれを処理する傾向があります(したがって、コードベース全体のすべての実装を変更する必要はありません)。
現時点ではこれはすべて大規模なプロジェクトですが、サブプロジェクトに切り替えることで、新しい外部コードを実装するための新しいプロジェクトを開発し、サブプロジェクトが完全に機能し、テストされていることを確認できます。次に、ユーザープロジェクトの依存関係/ファクトリクラスを切り替えます。ただし、大規模なプロジェクト全体でインターフェイスを広範囲に使用するため、これはより複雑になります。例えば
- サブプロジェクトA-インターフェースを含む
- サブプロジェクトB-インターフェースと古い外部jarはAに依存
- サブプロジェクトC-B(およびAおよび古い外部jar)に依存し、Bのインターフェース実装を使用するFactoryクラスを含む
Bの外部jarを変更する必要がある場合、次のことができます。
- サブプロジェクトB_iiの作成-再びAに依存し、新しい外部jar
- 完全に機能したら、Cの依存関係をB_iiに追加し、インターフェイスの新しい実装を使用するようにFactoryクラスを変更できます。
すべてが機能したら、Cの元のBへの依存関係を削除し、必要に応じてサブプロジェクトBを削除できます。
これは賢明な方法ですか?
だから、一般的に、私の質問は次のとおりです。
- 大規模なプロジェクトを解体した経験はありますか?共有したいと思うヒント/トリックはありますか?
- これは開発およびビルド時間にどのような影響を与えましたか?
- このようなプロジェクトのこのような分裂を構造化する上で、どのようなアドバイスを提供できますか?