オブジェクト指向のデザインパターンであるファーストクラスコレクションについて学んだことをまとめました。
ファーストクラスコレクションとは
配列やコレクションの操作を行うのは、for文などのループ処理が多いと思います。こういったループ処理がいろいろな箇所に点在すると、ロジックの修正がやりにくくなり、バグを発生させやすくなります。
バグを発生させにくくするためには、配列やコレクションをクラスにラップして管理させることです。この設計パターンをファーストクラスコレクションと呼びます。
実装例
// 注文履歴クラス
引用:オブジェクト指向をきちんと使いたいあなたへ 技術評論社
class OrderHistory {
List<Order> orders;
OrderHistory( List<Order> orders ) {
this.orders = orders;
}
Quantity totalOfThisYear() {
// 今年注文された総数
}
Orders lastOf() {
// 直近の注文
}
PendingOrders pending() {
// 未受注の注文一覧
}
}
操作するコレクションのインスタンスをコンストラクタ経由で渡します。クラスにコレクションを操作するメソッドを定義します。
クラスにロジックが集約されるので、クラスを利用する側ではロジックを書く必要はありません。
コレクションそのものを外部に公開するべきではないのですが、どうしてもしたい場合は読み取り専用のコレクションを渡すようにするのが良いです。
メリット
配列やコレクションに対する操作がクラスにまとめられるので、下記のようなメリットが生まれます。
- 配列やコレクションのデータを利用する側でロジックを書く必要が無くなる。
- 変更したいロジックの書かれた場所が特定しやすくなる。
- 変更の影響範囲を狭めることができる。
- 配列やコレクションに対する操作をメソッド化することで処理内容が明確になる。
最後に
ファーストクラスコレクションを採用することで、プログラム内に点在する配列やコレクションに対するロジックが集約されます。これによってプログラムの変更コストが下がり、バグの発生を起きにくくできます。
是非取り入れてみてください。使える設計パターンだと思います。