huydx/twitdx — pull request #1 by takiguchi0817 (2013-08-06 08:00:02+00:00)
Title: Review

まだ全部は見れていないのですが、リファクタリングしてみたので参考にしてください。

# 基本方針

## Code Style
インデントや命名規則は公式のガイドラインに従うようにしてください。
http://source.android.com/source/code-style.html#follow-field-naming-conventions

変数名についてはなるべく省略せず、定義を見なくても一目で分かるようなものが良いです。
```
// 例
a => activity
d => tweetList
```

## クラス設計
AndroidでもMVCを意識すると、プロジェクトは変更に強く機能追加がしやすくなります。

![](http://www.cs.ccsu.edu/~stan/classes/CS355/notes/images/AndroidMVC.png)

### Controller
AndroidではActivityやServiceなどがControllerにあたります。
Controllerの中にデータ処理やビューロジックが入っているとコードの見通しが悪くなる上にテストも書きづらくなってしまうので、Controllerにはモデルやビューを使用するための処理以外は書かないようにして、Controllerが太らないようにすると良いと思います。

### Model
PreferenceやDBへの書き込みなどはモデルクラスをクラスを作って一箇所にまとめると良いです。

## オブジェクトのスコープ
アプリケーション全体から参照されるオブジェクトはApplicationクラスに置くと良いです。
また独自定義したApplicationクラスの参照はBaseActivityにgetterを付けると良いです。

## 例外処理
例外は握りつぶさず、最低限ログを吐くようにしてください。

```java
// before
} catch (Exception e) {}

// after
} catch (IOException e) {
Log.d(TAG, "An error occurred while copy stream", e);
}
```

## メソッドの分割
if文のconditionなど、1行の式であっても分割すると意図が分かりやすくなったりします。

```java
// before
if ((width / 2) < REQUIRED_SIZE || (height / 2) < REQUIRED_SIZE) break;

// after
if (isBoxRequiredSize(width, height)) break;

private boolean isBoxRequiredSize(int width, int height) {
return (width / 2) < BITMAP_REQUIRED_SIZE ||
(height / 2) < BITMAP_REQUIRED_SIZE;
}
```

## テスト
テストがあるとリファクタリングをしたあとにデグレしてないか確認するのが楽になります。
http://developer.android.com/tools/testing/testing_android.html