良いコ-ドへの道―普通のプログラマのためのステップアップガイド

最終回 配列/コレクションを利用した抽象化―その4 Step3:関連のあるデータをオブジェクトに

Step3:関連のあるデータをオブジェクトに

ファイル一覧とファイルサイズを保持するクラスImageFilesで、データ構造をまとめてみましたリスト5⁠。


リスト5 Step3Action
@Path("/")
    public class Step3Action extends Action {

    public ServletContext context;
    public ImageFiles foodFiles;      ┓
    public ImageFiles animalFiles;    |
    public ImageFiles landscapeFiles; ┛①

    public ActionResult step3() {
        foodFiles = getFiles("/images/food");
        animalFiles = getFiles("/images/animal");
        landscapeFiles = getFiles("/images/landscape");
        return new Forward("step3.jsp");
    }

    private ImageFiles getFiles(String path) {
        File[] files = new File(context.getRealPath(path))
                           .listFiles();
        return new ImageFiles(files,
            FileUtil.sizeOfFiles(files));
    }

    public static class ImageFiles {                         ┓
        private final File[] files;                          |
        private long sizeOfFiles;                            |
                                                             |
        public ImageFiles(File[] files, long sizeOffiles) {  |
            this.files = files;                              |
            this.sizeOfFiles = sizeOfFiles;                  |
        }                                                    |
                                                             |
        public File[] getFiles() {                           |
            return this.files;                               |
                                                             |
        }                                                    |
                                                             |
        public long getSizeOfFiles() {                       |
            return this.sizeOfFiles;                         |
        }                                                    |
    }                                                        ┛②
}

フィールド変数が整理されてすごくわかりやすくなったっすね⁠。


このように、関連するデータは階層構造を持ったクラスでまとめると良いぞ。ImageFilesに対する何らかの操作が必要になったときは、ImageFilesのインスタンスメソッドとして定義できるぞい。

たとえば拡張子を指定して、PNGファイルだけを取得する次のようなメソッドも簡単に追加できそうですね。


public static class ImageFiles {
        :
    public File[]
        getFilesByExtension(String ext) {
        :
    }
}

それではそろそろ抽象化を……。


ふぉっふぉっふぉっ、やってみるがよいぞ。


かしこ、かしこまりました、かしこ!


おすすめ記事

記事・ニュース一覧