Step4:配列/コレクション化して抽象化する
抽象化完了! まずメインの処理の中で、
データと処理を分けた感じですね。取得したデータはFilesListというList型の変数に保持しています
@Path("/")
public class Step4Action extends Action {
public static final String[] PATHS = { ┓
"/images/food", |
"/images/animal", |
"/images/landscape" |
}; ┛①
public ServletContext context;
public List<ImageFiles> filesList; ― ②
public ActionResult step4() {
List<ImageFiles> filesList = new
ArrayList<ImageFiles>();
for (String path : PATHS) { ┓
filesList.add(getFiles(path)); |
} ┛③
this.filesList = filesList;
return new Forward("step4.jsp");
}
private ImageFiles getFiles(String path) {
File[] files = new File(context.getRealPath(path))
.listFiles();
return new Files(path, files);
}
public static class ImageFiles {
private final String path;
private final File[] files;
private final long sizeOfFiles;
public ImageFiles(String path, File[] files) {
this.path = path;
this.files = files;
this.sizeOfFiles = FileUtil.
sizeOfFiles(files);
}
public String getPath() {
return this.path;
}
public File[] getFiles() {
return this.files;
}
public long getSizeOfFiles() {
return this.sizeOfFiles;
}
}
}
これで対象の画像ディレクトリが追加されても、
JSPもコレクション
<body>
<h1>Good Code Way 6 - Step5</h1>
<c:forEach var="files" items="${filesList}" ┓
<c:set var="labelKey" value="label.${files.path}"/> ― ② |
<h2> |
${messages[labelKey]} ― ③ |
(<fmt:formatNumber |
pattern="0" value="${files.size / 1024}"/>KB) |
</h2> |
<ul> |
<c:forEach var="file" items="${files.files}"> |
<li>${file.name}</li> |
</c:forEach> |
</ul> |
</c:forEach> ┛①
</body>
label./images/food=Food Photos
label./images/animal=Animal Photos
label./images/landscape=Landscape Photos
ImageFilesを生成する部分、
考察1:どのタイミングで抽象化するのがベストなの?
今回の例のように簡単なものであれば、
考察2:コードの重複をまとめるな!?
「コードの重複は悪」
よくある例として
考察3:これって単なるループなんじゃない?
そのとおり! グッドクエスチョンです。単なるループも単なる関数も、
なお、
今回のまとめ
今回は基本的過ぎて無意識に行っている
本連載は今回で終了しますが、
お勧めサイト/書籍
- 『達人プログラマー ― システム開発の職人から名匠への道』
Andrew Hunt/David Thomas (著)、
村上 雅章(訳)、 ピアソン・ エデュケーション、 2000年 - 今回出てきた
「DRY原則」 はこの本に載っています。本連載で紹介してきた内容も含めて、 実践的かつわかりやすい文章で書かれています。超有名な本ですが、 まだ読まれていない人は、 本連載の次はぜひこの本を読むことを強くお勧めします。 『実装パターン』
Kent Beck(著)、 長瀬 嘉秀/ 永田 渉 (監訳)、
株式会社テクノロジックアート(訳)、 ピアソンエデュケーション、 2008年 「この本はプログラミングに関する本だ。もう少し正確に言うと、 他の人が読んで理解できるコードの作成方法について書かれた本だ」 という書き出しから始まる良いコードのための本です。Java中級者~上級者向けではありますが、 個人的にぼんやりと感じていた 「良いコードの書き方」 がはっきり示されていて、 目から鱗な感覚でした。第6章 「状態」 の 「共通の状態」 の節に、 本稿の 「ペアになる情報をまとめる (ImageFiles)」に関連する記述があります。