オプションの伝え方
Blog をオートパイロットして必要箇所だけ抜き出すプログラムの話。 このプログラムは Java で書いてあるので、以後、そういう前提で進める。
構造を簡単に説明すると、まず GetBlog というクラスがある。 それぞれの blog に対応した機能は、これを継承して実装する。
GetBlog には各オプションに対応した setter、getter が用意されていて、 オプションを解釈したらそれが呼び出される。 例えば、新規記事だけファイルを作成するという場合に、 -new というオプションで起動すれば、 GetBlog.isNewOnly() が true を返すようになる。
さて、GetBlog は、各 blog の毎月のアーカイブを get して、 その内容を parse しながら分割する。 そのためのクラスは SplitMessages というのだが、 GetBlog 内で SplitMessage のインスタンスを作り、 メソッドを呼び出す、という流れになっている。 ということは、-new で指定されたオプションを渡さなければならない。 実際、各月のアーカイブを get して parse する処理は、 こんな感じになっている。
protected boolean getMonthlyPage(int year, int month) { GetMonthlyPage gmp = new GetMonthlyPage(); gmp.setBaseUriString(getBaseUriString()); gmp.setDirName(getTmpDirectory()); if (gmp.getPage(year, month) == false) return false; String fileName = gmp.getSaveFileName(year, month); SplitMessages sm = new SplitMessages(); sm.setBaseUri(getBaseUriString()); sm.setTargetFileName(fileName); sm.setDirName(getResultDirectory()); sm.setTmpDirName(getTmpDirectory()); sm.setEncodeString("euc_jp"); sm.setCallback(getCallback()); sm.setNewOnly(isNewOnly()); return sm.split(); }
どこがイヤかというと、パラメータの引き継ぎ方で、
sm.setNewOnly(isNewOnly());
こんな感じの処理がぞろぞろ出てくるのがイヤ。 修正が入って何か引き継ぐ情報が増える毎に1行ずつ増えることになる。 こういう場合はオプションを伝えるために、 オプションのクラスを用意しておいて、それを引き渡せばいいのだ。
とか書いているうちに4時になりそうなので(それで?)、 ここで一旦書き込む。
- 2004.09.27 Monday
- リファクタリング
- 03:53
- comments(5)
- trackbacks(0)
- by phinloda