を避けデザイン私は、configファイルを読み込み、設定ファイルで指定されたアプリケーション/プログラムを実行するツールを実装する必要があります。テストのための一種の自動ランナー。私はそれを行うプログラムを実装しましたが、私は依存壁にヒットしました。私の現在の設計ツールでは、設定ファイルを解析して、ProgramTypeのマップとジョブのリストを取得します。 ProgramTypeに基づいてRunnerクラスが選択され、初期化されます。ランナークラスはProgram srcの一部です。ツール、依存関係トラップ
//this is just a pseudo code
pkg org.Tool
class Tool {
//after parsing
runJobs(map) {
if(map.get() == ProgramType)
org.Tool.JobStats = org.ProgramType.Runner.run(Job)
}
}
pkg org.ProgramType
class Runner {
org.Tool.JobStats run(Job) {
if(Job = "certain job")
return CertainJob.run(Job)
}
}
コンパイルされたorg.ProgramType。*;が必要です。 ProgramTypeをビルドするにはorg.Tool.Jobとorg.Tool.JobStatsが必要です。私が作成した「依存地獄」は明らかに非常に悪いデザインです。私は単純にProgramType jarを呼び出し、JobStats.txtファイルにJobStatsを格納し、jarの実行が終了したらファイルを読み込んで処理するという解決策がありました。このソリューションは、Jobsが多数の設定などで複数回実行されたり、扱うことができる* .txtファイルが多いため、受け入れられません。私は、私の問題のためのコンパイルソリューションを見たと思う。「部分コンパイル」ツール、ProgramTypeコンパイル、再コンパイルツールなど。しかし、私はそれを見つけることができない、また、それは "依存地獄"のパターンを取り除くことは賢明だろう。したがって、私の質問 "どのように私はこれを設計する必要がありますか"。
は、私は私の問題を解決するために、私はデザインパターンを探していました@aviadコメントに書いたように
が
を解決しよう(私は聞いていない場合の説明は、明確であることを願っています)。私はそれを "Dependency Inversion Principle"と呼んだ。ここで私はパターンを記述したpdf文書、その価値ある読書(http://www.objectmentor.com/resources/articles/dip.pdf)をリンクしています(別の良い説明http://java.dzone.com/articles/fun-modules)。あなたの助けをありがとう(私は本当にあなたが推薦したフレームワークが好きでした)。
あなたはDependency Injectionについて話していますか?もしそうなら、Guiceをhttp://code.google.com/p/google-guice/ – tartak
ここでチェックしてください。短い答え:みんなのように;さらに短く:反射 –
カタロニア語 ヒントのためのThx私はそれを調べます。 @guido反射エラーが発生しやすく、維持しにくいですか? – alien01