2012-01-12 10 views
3

私はレガシーフレームワークに取り組んでいます。明らかに、相互依存する2つのライブラリがあります。つまり、libAlibBからインポートし、libBlibAからインポートします。最初はひどいデザインだと思いますが、なぜ誰かがこのようなことをしますか?むしろ、誰がこれを書いてくれるのか?2つのJavaライブラリが互いにインポートしていますか?

編集:

各ライブラリは、他のクラスに依存しますので、彼らは輸入パッケージを行い、そのビルド・パスに他のライブラリjarを持っています。

+0

インポートはどういう意味ですか?あなたはJavaの 'import'ステートメントについて話していますか? – adarshr

+0

Eclipseでは、2つのプロジェクトが互いに依存しているとは限りません。あなたが描いている状況は本当に不条理です。 – dhblah

+0

@gasan:EclipseはJavaで開発する唯一の方法ではなく、1つのプロジェクトから2つの異なるjarを生成することもできます。 –

答えて

6

この場合、2人の当事者が独立しているので、これは簡単です。彼らがお互いに話していなければ、サイクルを作ることは難しくありません。あなたはそれらを避けることに注意する必要があります。

循環依存関係を作成するのは難しくありません。 Java自体を見てください:java.lang、java.util、およびjava.ioにはサイクルがあります。それはとてもひどいので、あなたはJavaの作成をやめますか?

つまり、libBを使用しないでlibAを使用することはできません。逆も同様です。彼らは一つの大きな図書館になった。 Javaや他のシステムのパッケージと同じです:一度サイクルがあれば、それらのパッケージをあたかも一緒に使う必要があります。

guysは、Springを書く人がサイクルに多くの注意を払っています。彼らはそれらを排除するためにフレームワークを設計し、リファクタリングします。

だから何が危害ですか? Juergen Hellerは彼らが悪いと言って、彼は正しい。しかし、あなたの視点から見れば、どんな悪があなたに訪れますか?つまり、実行とテストの両方を行う必要があります。それらの間にサイクルがある場合は、クラスBなしでクラスAをテストすることはできません。これは、テストを行い、実行がより困難になります。

サイクルを持たない代替品を選択できます。ソースを変更することができれば、それをリファクタリングして維持することができます。しかし、それだけです。

自分で作成したコードをチェックして、自分で作成したかどうかを確認する必要があります。 IntelliJには、コードベースに適用できる素敵な分析ツールがあります。見てみな。

+0

はい私はそれがひどいことを知っていますが、私の判断で止まったら、私はこの質問をしませんでした。 – UmNyobe

0

両方のライブラリは、おそらく異なる開発者によって同時に書かれました。あるいは異なる開発者が同じ開発者であったり、両方のライブラリを一つの大きなコードベースとして扱い、循環依存を避けることを心配していなかった開発者がいました。例えば彼らは、細心の注意を払わずに働く何かを書くのに十分な時間がありました。

1

開発者はlib Aを開発中に、lib BのFooクラスが有用であることを発見しました。開発者はlib Bを開発している間に、lib AのクラスBarが有用であることを発見しました。

私はそれが賢明なことではないと言いますが、あなたの質問はなぜ誰かがそれをするのかと尋ねます。これはおそらく答えです。

0

おそらくそれは未経験であろう。
Mavenのような最新のビルドツールは、アーティファクト間の循環依存性を排除します。

+0

それはそれらを指摘しますが、どうすればそれらを排除できますか?この場合Mavenは何をしますか? – duffymo

+0

ビルドに失敗し、循環依存関係を解決するように求められます。 – johnstok

+0

あなたのコードでそれが検出されたことを意味します。 libAとlibBを修正したり、それらを削除するよう依頼したりすることはありません。 JDK自体について何が言いますか?何もない。 – duffymo

関連する問題