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

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

この記事を読むのに必要な時間:およそ 3 分

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) {
        :
    }
}

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


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


かしこ,かしこまりました,かしこ!


著者プロフィール

縣俊貴(あがたとしたか)

学生時代にMSXで制限された環境でのプログラミングの楽しさを学ぶ。以来,オープンソースのWiki実装「MobWiki」の開発や受託開発などを経て,現在はプロジェクト管理ツール「Backlog」,ドローツール「Cacoo」など,コラボレーション型のWebサービスの企画と製品開発を行う。また,Webアプリケーションフレームワーク「Cubby」のコミッタを務める。福岡在住。株式会社ヌーラボ所属。

ブログ :http://d.hatena.ne.jp/agt

Twitter:@agata

コメント

コメントの記入